Kyr*_*yro 5 asp.net asp.net-mvc validationattribute
我有一个实现 IClientValidatable 的自定义 ValidationAttribute。但是从不调用 GetClientValidationRules 来实际将验证规则输出到客户端。
该属性没有什么特别之处,但由于某种原因,它从未被调用过。我试过在 Application_Start() 中注册一个适配器,但这也不起作用。
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class CustomAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
return true;
}
#region IClientValidatable Members
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
string errorMessage = FormatErrorMessage(metadata.GetDisplayName());
yield return new ModelClientValidationRule { ErrorMessage = errorMessage, ValidationType = "custom" };
}
#endregion
}
public class CustomAdapter : DataAnnotationsModelValidator<CustomAttribute>
{
public CustomAdapter(ModelMetadata metadata, ControllerContext context, CustomAttribute attribute)
: base(metadata, context, attribute)
{
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return this.Attribute.GetClientValidationRules(this.Metadata, this.ControllerContext);
}
}
Run Code Online (Sandbox Code Playgroud)
在 Application_Start() 我有:
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CustomAttribute), typeof(CustomAdapter));
Run Code Online (Sandbox Code Playgroud)
当我在 GetClientValidationRules 中放置断点时,它永远不会被击中。
为了GetClientValidationRules()调用方法,您必须启用客户端验证支持。可以通过以下方式完成:
在 web.config 中(对于应用程序的所有页面):
<appSettings>
<add key="ClientValidationEnabled" value="true" />
Run Code Online (Sandbox Code Playgroud)
或者仅在特定视图上:
任何一个
@{ Html.EnableClientValidation(); }
Run Code Online (Sandbox Code Playgroud)
或者
@(ViewContext.ClientValidationEnabled = true)
Run Code Online (Sandbox Code Playgroud)
请注意,它必须先于
@using (Html.BeginForm())
Run Code Online (Sandbox Code Playgroud)
陈述。
如果您使用jquery非侵入式验证(目前似乎是标准),您还需要启用它:
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Run Code Online (Sandbox Code Playgroud)
在web.config或
@Html.EnableUnobtrusiveJavaScript()
Run Code Online (Sandbox Code Playgroud)
对于特定的观点。
| 归档时间: |
|
| 查看次数: |
2212 次 |
| 最近记录: |