情景: - 我正在开发MVC 4应用程序,该网站将以多种语言运行,并将托管在Azure上。 对于本地化,我们依赖于数据库而不是资源包方法。
问题: - 我想在运行时自定义错误消息,我想通过数据库本地化消息。
我试图通过反射来更改属性值,但它没有奏效。
代码: -
//Model
public class Home
{
[Required(ErrorMessage = "Hard coded error msg")]
public string LogoutLabel { get; set; }
}
//On controller
public ActionResult Index()
{
Home homeData = new Home();
foreach (PropertyInfo prop in homeData.GetType().GetProperties())
{
foreach (Attribute attribute in prop.GetCustomAttributes(false))
{
RequiredAttribute rerd = attribute as RequiredAttribute;
if (rerd != null)
{
rerd.ErrorMessage = "dynamic message";
}
}
}
return View(homeData);
}
在客户端进行验证时,它会向我显示旧消息“Hard Coded error msg”。 如果我们不想使用资源包方法
,请建议如何定制答案 0 :(得分:1)
您打算实现此嵌套循环来本地化所有实体的验证消息吗?我认为没有。更好的解决方案是使用Validator
属性。
为你的班级:
[Validator(typeof(HomeValidator))]
public class Home
{
public string LogoutLabel { get; set; }
}
现在让我们实现HomeValidator:
public class HomeValidator : AbstractValidator<Home>
{
public HomeValidator()
{
RuleFor(x => x.LogoutLabel ).NotEmpty().WithMessage("your localized message");
}
}
答案 1 :(得分:1)
您最好创建并注册自己的 DataAnnotationsModelMetadataProvider ,您可以在其中覆盖错误消息。有关详细信息,请参阅MVC Validation Error Messages not hardcoded in Attributes
中类似问题的答案