2

現在、DataAnnotations.RequiredAttributeの単純なラッパーであるカスタム属性があります(後で拡張しますが、この概念実証を今のところ機能させようとしています)。ただし、これはMVC3の目立たない検証では機能しません。

本当に、それは非常に単純な問題です。

これが私のカスタム属性です:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
    public RequiredAttribute()
    {
    }

    public RequiredAttribute(Type errorMessageResourceType, string errorMessageResourceName)
    {
        this.ErrorMessageResourceName = errorMessageResourceName;
        this.ErrorMessageResourceType = errorMessageResourceType;
    }
}

次に、2つのモデルプロパティを示します。1つはカスタム属性を使用し、もう1つはDataAnnotations属性を使用します。

[System.ComponentModel.DataAnnotations.Required]
public string FirstName { get; set; }

[CustomValidationAttributes.Required]
public string LastName { get; set; }

Razorコードは次のとおりです。

<p>
    @Html.TextBoxFor(model => model.FirstName)
    @Html.ValidationMessageFor(model => model.FirstName)
</p>
<p>
    @Html.TextBoxFor(model => model.LastName)
    @Html.ValidationMessageFor(model => model.LastName)
</p>

そして、これが結果の出力です:

<p>
    <input type="text" value="" name="FirstName id="FirstName" data-val-required="The First Name field is required." data-val="true">
    <span data-valmsg-replace="true" data-valmsg-for="FirstName" class="field-validation-valid"></span>
</p>
<p>
    <input type="text" value="" name="LastName" id="LastName">
    <span data-valmsg-replace="true" data-valmsg-for="LastName" class="field-validation-valid"></span>
</p>

ご覧のとおり、FirstName(DataAnnotationsを使用)はバリデーターに必要なhtml属性でレンダリングされますが、LastName(CustomValidationAttributesを使用)にはとがありませdata-val-requireddata-val attributes

私は何か間違ったことをしていますか、それともこれはMVC3の目立たない検証ではサポートされていませんか?

前もって感謝します。

4

1 に答える 1

4

上記のコメントでインゴが指摘したように、私はIClientValidatableこれらが機能するために実装する必要がありました。したがって、上記の例では、これを属性に追加する必要がありました。

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var modelClientValidationRule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.DisplayName),
            ValidationType = "required"
        };

        yield return modelClientValidationRule;
    }
于 2011-08-09T15:00:28.010 に答える