簡體   English   中英

MVC3非侵入式驗證不適用於自定義DataAnnotations屬性

[英]MVC3 Unobtrusive Validation not working for custom DataAnnotations attribute

我有一個自定義屬性,該屬性目前是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;
    }
}

這是兩個模型屬性,一個使用custom屬性,一個使用DataAnnotations屬性:

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

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

這是剃刀代碼:

<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非侵入式驗證不支持此功能?

提前致謝。

正如上面的ingo在評論中指出的那樣,我最終不得不實現IClientValidatable才能使它們起作用。 因此,在上面的示例中,我必須將其添加到我的屬性中:

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

        yield return modelClientValidationRule;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM