![](/img/trans.png)
[英]ASP.Net MVC 3 ViewModel, unobtrusive JavaScript and custom validation
[英]Asp.Net MVC and custom unobtrusive validation
我正在嘗試使“ mustbetrue”自定義規則起作用。 大致基於這個問題 :我的問題是,當我提交表單時,客戶端驗證不會給我一個錯誤(不會使驗證文本出現)。 另外,我在jscript驗證方法中設置了一個斷點,因此永遠不會被觸發。 添加適配器的連線代碼確實被觸發。 控制台中沒有錯誤。
我究竟做錯了什么?
這是我在服務器端的內容:
public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value == null) return false;
try
{
return Convert.ToBoolean(value);
}
catch (InvalidCastException)
{
return false;
}
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,
ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = this.ErrorMessage,
ValidationType = "mustbetrue"
};
}
}
和
public class MustBeTrueAttributeAdapter : DataAnnotationsModelValidator<MustBeTrueAttribute>
{
public MustBeTrueAttributeAdapter(ModelMetadata metadata, ControllerContext context, MustBeTrueAttribute attribute)
: base(metadata, context, attribute)
{
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return new[] { new ModelClientValidationMustBeTrueRule(ErrorMessage) };
}
}
public class ModelClientValidationMustBeTrueRule : ModelClientValidationRule
{
public ModelClientValidationMustBeTrueRule(string errorMessage)
{
ErrorMessage = errorMessage;
ValidationType = "mustbetrue";
}
}
並在global.asax中
protected void Application_Start()
{
// stuff
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(MustBeTrueAttribute), typeof(MustBeTrueAttributeAdapter));
// stuff
}
並在對象上:
[MustBeTrue(ErrorMessageResourceName = "Register_TermsNotAccepted", ErrorMessageResourceType = typeof(Resources.Global))]
public bool AcceptedTerms { get; set; }
客戶端:
$(document).ready(function () {
jQuery.validator.addMethod("mustbetrue", function (value, element) {
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
jQuery.validator.unobtrusive.adapters.addBool("mustbetrue", "mustbetrue");
});
以及輸出的相關HTML:
<input data-val="true" data-val-mustbetrue="You must accept the terms and conditions" data-val-required="The AcceptedTerms field is required." id="AcceptedTerms" name="AcceptedTerms" type="checkbox" value="true" class="valid">
如果您已經檢查了是否啟用了客戶端驗證(無論是在配置中還是在代碼中),那么我想這是因為您是在不干擾驗證腳本解析html 之后添加適配器的, 請參閱我的答案以獲取詳細信息和可能的選項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.