2012-03-24 4 views
0

매우 간단한 예제에서 클라이언트 측 유효성 검사를 사용하려고 시도했지만 작동하지 않습니다. 나는 인터넷에서 기존 예제를 시작했다. 여기매우 간단한 예제에서 클라이언트 유효성 검사가 작동하지 않았습니다.

그 것이다 (허용 대답 참조)

http://benjii.me/2010/11/credit-card-validator-attribute-for-asp-net-mvc-3/ 그래서 나는 빈 솔루션에서 시작하고, 가격이보다 큰 것을 확인하고 싶습니다 : ASP .Net MVC 3 unobtrusive custom client validation

기본적으로,이 솔루션이 블로그를 사용 최소.

내 컨트롤러 :

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(MinPriceViewModel model) 
    { 
     if (!ModelState.IsValid) 
      return View(model); 

     return Content("Thank you very much"); 
    } 
} 

내보기 모델 :

public class MinPriceViewModel 
{ 
    [MinPrice(MinPrice=9.99)] 
    [Required] 
    public double Price { get; set; } 
} 

검증을위한 속성 (클라이언트 & 서버) :

public class MinPriceAttribute : ValidationAttribute, IClientValidatable 
{ 
    public double MinPrice { get; set; } 

    public override bool IsValid(object value) 
    { 
     if (value == null) 
      return true; 

     var price = Convert.ToDouble(value); 

     if (price < MinPrice) 
     { 
      return false; 
     } 

     return true; 
    } 

    public override string FormatErrorMessage(string name) 
    { 
     return "Attention le champ " + name + " ne contient pas un prix acceptable."; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     yield return new ModelClientValidationRule 
     { 
      ErrorMessage = this.ErrorMessage, 
      ValidationType = "minprice" 
     }; 
    } 
} 

뷰 :

@model MinPriceValidation.Models.MinPriceViewModel 

@{ 
    ViewBag.Title = "Home Page"; 
} 

<script src="../../Scripts/jquery.validate.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(function() { 
     jQuery.validator.unobtrusive.adapters.addBool('minprice'); 
    }); 
</script> 

@using(Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.Price) 
    @Html.TextBoxFor(m => m.Price) 
    @Html.ValidationMessageFor(m => m.Price) 

    <input type = submit /> 
} 

내 컨트롤러의 게시물 작업에 중단 점을 배치하여 클라이언트 또는 서버 유효성 검사가 발생했는지 확인합니다. 솔루션을 실행하고 1을 입력하고 제출하면 내 컨트롤러에서 중단 점에 도달했습니다 (조치 후) >> 나는 클라이언트 검증이 사용되지 않는다고 결론을 내 렸습니다.

기본 예제 (신용 카드 유효성 검사)에서 시작하여이 신용 카드 유효성 검사가 클라이언트 유효성 검사 (다른 솔루션에서 테스트 됨)에서 작동하기 때문에 이해가되지 않습니다.

나는 조금 길다.

클라이언트 유효성 검사가 작동하지 않는 이유는 무엇입니까?

감사합니다.

jQuery.validator.addMethod("minprice", function (value, element, param) { 
     // Perform tests here for client validation 
     return (value>10); 
    }); 

    jQuery.validator.unobtrusive.adapters.addBool('minprice'); 

나는이 추가 된 테스트 :


UPDATE

많이 인터넷 검색 후, 나는 어떤 사람들은 우리가이 같은 클라이언트 유효성 검사를위한 자바 스크립트 기능을 필요로 말한다 볼 자바 스크립트 기능을 작동하지만 그것은 나에게 이상한 것 크레타 카드 예제 신용 카드를 확인하기위한보기에서 자바 스크립트 기능이 없어!

아직 분실 상태입니다.

답변

1

그것은 당신이 following post reffering하는 가정 사용자 정의 자바 스크립트 함수의 필요없이 작동합니다.

credit card validation rule은 jquery 유효성 검사 플러그인에 직접 내장되어 있습니다. 그래서 사용자 정의 유효성 검사 기능을 작성할 필요가 없습니다.

minprice 규칙과 관련해서는 그런 것이 없으므로 사용자 정의 자바 스크립트 함수를 작성하여 minprice의 의미를 정의해야합니다.

이 당신이 간단하게 할 수 있기 때문에이 속성과 일부 바퀴를 개혁하는 느낌을 얻을 말했다되는 :

[Range(9.99, double.MaxValue)] 
[Required] 
public double Price { get; set; } 

을 우리가 가격에 대해 이야기하고 있기 때문에, 그것의 진수 형식을 사용하는 것이 좋습니다 모델 :

[Range(9.99, double.MaxValue)] 
[Required] 
public decimal Price { get; set; } 

이제 자동 클라이언트 측 및 서버 측 유효성 검사가 수행됩니다.

+0

Yuo가 맞습니다. 나는 몰랐다. 감사합니다. – Bronzato

+0

작동하지만 최저 가격이 변경되면 프로그래머가 코드를 변경해야합니다. 이것은 마케팅 규칙이며 애플리케이션의 재 구축/재배포없이 프로그래머가 아닌 사람들이 동적으로 변경해야합니다. – RickAndMSFT

1

이러한 설정이 Web.config의에 해당해야합니다 :

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    </appSettings> 

그리고이 스크립트를 페이지에 포함 : 당신은 당신이 신용 카드로 이것을 사용하는 사람들을보고되어 있다고

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
+0

예, 설정이 web.config에 맞고 예, 스크립트가 포함되어 있지만 여전히 운이 없습니다. 어쨌든 고마워. – Bronzato

+0

업데이트 됨. 수익률 반환 때문일 수 있습니다. –

+0

목록이 변경됨 <...이 작동하지 않습니다. – Bronzato

관련 문제