是否可以为Html.DropDownListFor设置默认验证消息为“此字段是必需的”?

时间:2018-04-13 01:29:11

标签: asp.net-mvc html.dropdownlistfor

我们继承了一个应用程序,并对使用@ Html.DropDownListFor

进行了查询
@Html.DropDownListFor(model => model.SomeLookup.Id
, new SelectList(SomeList, "Id", "Description")
, "-- select --")

默认情况下,data-val-required属性在渲染控件上设置为

data-val-required="The Id field is required."

这会覆盖任何验证脚本。

我们知道我们可以将data_val_required属性设置为我们想要的消息:

@Html.DropDownListFor(model => model.SomeLookup.Id
, new SelectList(SomeList, "Id", "Description")
, "-- select --"
, new [] { data_val_required="This field is required" })

问题是我们需要设置属性的应用程序(以及可能的其他应用程序)中的多个页面有数十个下拉列表。如果我们忘记这样做,用户会收到他们发现令人困惑的默认消息。

是否可以覆盖此默认值,以便在使用此处时,使用的默认消息是“此字段是否必需”?

1 个答案:

答案 0 :(得分:1)

默认消息在System.ComponentModel.DataAnnotations资源文件中定义。要覆盖它,您可以通过继承DataAnnotationsModelValidator

来创建自定义RequiredAttributeAdapter

首先在App_GlobalResources中创建一个资源文件,比如MyResources.resx并添加以下键/值(确保访问修饰符为public

PropertyValueRequired This field is required

然后创建以下适配器

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute)
        : base(metadata, context, attribute)
    {
        attribute.ErrorMessageResourceType = typeof(App_GlobalResources.MyResources);
        attribute.ErrorMessageResourceName = "PropertyValueRequired";
    }
}

最后在Global.asax.cs

中注册适配器
DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute), typeof(MyRequiredAttributeAdapter));