我試圖理解一些東西。
從這個博客帖子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>
}
所以基本上我有三個問題:
是$ .validator.unobtrusive.adapters.addBool(「mandatory」,「required」);除了寫一個屬性類之外,你真的是唯一需要的東西嗎?
它究竟在幕後做了什麼?
在哪裏可以找到有關addBool的良好文檔?
1:僅適用於「已有的」適配器。 2:不確定,希望找出自己。 3:如果你找到一個,請告訴我! – BlueChippy 2013-01-09 04:45:15
http://thewayofcode.wordpress.com/2012/01/18/custom-unobtrusive-jquery-validation-with-data-annotations-in-mvc-3/ – BlueChippy 2013-01-09 05:01:06