经过一番搜索和反复试验,我使用了一些基于这篇博文的代码。改编代码如下。
为您的项目添加一个新类:
using System.Web.Mvc;
public class FixedRequiredAttributeAdapter : RequiredAttributeAdapter
{
public FixedRequiredAttributeAdapter (ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute)
: base(metadata, context, attribute)
{
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
// set the error message here or use a resource file
// access the original message with "ErrorMessage"
var errorMessage = "Required field!":
return new[] { new ModelClientValidationRequiredRule(errorMessage) };
}
}
通过更改 app start in 来告诉 MVC 使用此适配器global_asax
:
protected void Application_Start()
{
...
DataAnnotationsModelValidatorProvider.RegisterAdapterFactory(
typeof(RequiredAttribute),
(metadata, controllerContext, attribute) => new FixedRequiredAttributeAdapter(
metadata,
controllerContext,
(RequiredAttribute)attribute));
您可以对错误消息执行更多操作,例如从基于类/属性的资源文件中获取:
var className = Metadata.ContainerType.Name;
var propertyName = Metadata.PropertyName;
var key = string.Format("{0}_{1}_required", className, propertyName);
用 MVC5 测试。
更新:看起来这只适用于 javascript/unobtrusive 验证。如果您关闭 javascript 以获取回发验证,它仍会显示“{} 字段是必需的”。