7

次のようなViewModelを指定します。

public class Login {
    [Required]
    public string Username { get; set; }

    [Required, CustomValidator]
    public string Password { get; set; }
}

そして、このようなビュー(ここではRazor構文):

@Html.TextBoxFor(f => f.Password)

次のマークアップを取得しています。

<input type="text"
       value="" 
       data-val-required="This field is required." />

ただし、カスタムバリデーターの「data-」属性も含めたいと思います。

私はこのようなものが欲しい:

<input type="text" 
       value="" 
       data-val-required="This field is required."
       data-val-customvalidator="XYZ" />

ASP.NET MVC 3.0でこれを実現するにはどうすればよいですか?

たとえば、カスタムバリデーターに特別な属性を設定する必要がありますか?またはどこかに登録しますか?

4

1 に答える 1

8

そうですね、MSDNは私を救ってくれました(よくあることですが)。

http://msdn.microsoft.com/en-us/library/ff398048.aspx

したがって、最初に検証属性用のアダプターを作成する必要があります。

public class CustomAttributeAdapter : DataAnnotationsModelValidator<EmailAttribute>
{
    public CustomAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        CustomAttribute attribute) :
        base(metadata, context, attribute)
    {
    }

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        ModelClientValidationRule rule = new ModelClientValidationRule()
        {
            ErrorMessage = ErrorMessage,
            ValidationType = "custom"
        };
        return new ModelClientValidationRule[] { rule };
    }
}

(これが機能するには、「ValidationType」設定を小文字にする必要があります。これは、HTML5属性として使用される後置文字であるためです-「data-val-custom」。)

次に、Application_Startに登録するだけです。

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(EmailAttribute),
    typeof(EmailAttributeAdapter));

HTML5検証を楽しんでください。:)

于 2010-11-08T07:42:14.283 に答える