【问题标题】:GetClientValidationRules is never called in MVC application在 MVC 应用程序中永远不会调用 GetClientValidationRules
【发布时间】:2014-08-14 02:04:00
【问题描述】:

我有一个实现 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);
    }
}

在 Application_Start() 我有:

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CustomAttribute), typeof(CustomAdapter));

当我在 GetClientValidationRules 中放置断点时,它永远不会被命中。

【问题讨论】:

  • 你使用不显眼的验证吗?如果是,您是否在 web.config 中打开它?您是否将此属性应用于模型的属性?您是否使用标准 mvc Html 助手(如 Html.TextBoxFor)呈现具有此属性的属性?

标签: asp.net asp.net-mvc validationattribute


【解决方案1】:

为了调用GetClientValidationRules() 方法,您必须启用客户端验证支持。可以通过以下方式完成:

在 web.config 中(适用于应用程序的所有页面):

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

或仅在特定视图上:

要么

@{ Html.EnableClientValidation(); }

@(ViewContext.ClientValidationEnabled = true)

请注意它必须在前面

@using (Html.BeginForm())

声明。

如果您使用的是 jquery 非侵入式验证(这似乎是目前的标准),您还需要启用它:

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

web.config

@Html.EnableUnobtrusiveJavaScript()

针对特定视图。

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多