我们继承了一个应用程序,并对使用@ 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" })
问题是我们需要设置属性的应用程序(以及可能的其他应用程序)中的多个页面有数十个下拉列表。如果我们忘记这样做,用户会收到他们发现令人困惑的默认消息。
是否可以覆盖此默认值,以便在使用此处时,使用的默认消息是“此字段是否必需”?
答案 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));