5

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 内にブレークポイントを配置すると、ヒットすることはありません。

4

1 に答える 1

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()

特定のビューの場合。

于 2016-08-25T13:37:34.490 に答える