14

我試圖理解一些東西。

從這個博客帖子http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

橋接HTML和jQuery驗證:適配器

編寫客戶端驗證包括兩個步驟:編寫 驗證了jQuery驗證,寫這需要適配器來自HTML屬性的 參數值並將其轉換爲jQuery 驗證元數據。前一個主題不在此博客的範圍 後(因爲它真的不是MVC特定的)。

有一個適配器集合可在 jQuery.validator.unobtrusive.adapters。掛接適配器 集合是適配器註冊方法(add)和三個助手 ,可用於註冊非常常見的適配器類型(addBool, addSingleVal和addMinMax)。

請注意,它說兩個步驟。

但如果你看看這個帖子MVC3: make checkbox required via jQuery validate?,你只需要在第二個步驟(「寫適配器」)的驗證工作 - 通過加入這一行的代碼:

$.validator.unobtrusive.adapters.addBool("mandatory", "required"); 

我測試了在一個新的MVC 4互聯網應用程序中的代碼,它工作正常,這是超簡單的示例。

視圖模型

public class SimpleViewModel 
{ 
    [Mandatory(ErrorMessage = "You must agree to the Terms to register.")] 
    [Display(Name = "Terms Accepted")] 
    public bool IsTermsAccepted { get; set; } 
} 

驗證屬性

public class MandatoryAttribute : ValidationAttribute, IClientValidatable 
{ 
    public override bool IsValid(object value) 
    { 
     return (!(value is bool) || (bool)value); 
    } 

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

查看

@model MvcApplication2.Models.SimpleViewModel 

@{ 
    ViewBag.Title = ""; 
}  

@using (Html.BeginForm()) { 
    @Html.ValidationSummary() 
    @Html.CheckBoxFor(model => model.IsTermsAccepted) 
    @Html.ValidationMessageFor(model => model.IsTermsAccepted) 
    <input type="submit" value="Send" /> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
    <script type="text/javascript"> 
     $.validator.unobtrusive.adapters.addBool("mandatory", "required"); 
    </script> 
} 

所以基本上我有三個問題:

  1. 是$ .validator.unobtrusive.adapters.addBool(「mandatory」,「required」);除了寫一個屬性類之外,你真的是唯一需要的東西嗎?

  2. 它究竟在幕後做了什麼?

  3. 在哪裏可以找到有關addBool的良好文檔?

+1

1:僅適用於「已有的」適配器。 2:不確定,希望找出自己。 3:如果你找到一個,請告訴我! – BlueChippy 2013-01-09 04:45:15

+1

http://thewayofcode.wordpress.com/2012/01/18/custom-unobtrusive-jquery-validation-with-data-annotations-in-mvc-3/ – BlueChippy 2013-01-09 05:01:06

回答

3

除了文章@BlueChippy鏈接到評論,我找到了答案2在this article

  1. 是的這是除屬性以外唯一需要的東西。這是因爲我們使用已存在的規則(要求)。
  2. 它是做什麼的?

這只是註冊了必要的屬性, 其中第一個參數是適配器名稱和 第二個參數是jQuery的的名稱驗證規則新的驗證適配器。適配器名稱 應該匹配我們前面指定的值作爲驗證類型 ,並且jQuery驗證必需規則將要求用戶檢查 複選框。

3。更多信息可在this article on Brad Wilson's blog中找到。