Asp.net mvc MVC4从数据库本地化验证消息

Asp.net mvc MVC4从数据库本地化验证消息,asp.net-mvc,validation,asp.net-mvc-4,Asp.net Mvc,Validation,Asp.net Mvc 4,情景:- 我正在开发MVC4应用程序,该网站将以多种语言运行,并将托管在Azure上。 对于本地化,我们依赖于数据库而不是资源包方法 问题:- 我想在运行时自定义错误消息,我想通过数据库本地化消息 我曾尝试通过反射来更改属性值,但没有成功 代码:- //Model public class Home { [Required(ErrorMessage = "Hard coded error msg")] public st

情景:- 我正在开发MVC4应用程序,该网站将以多种语言运行,并将托管在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);
    }  
在客户端,当验证发生时,它向我显示旧消息“硬编码错误消息”。
如果我们不想使用资源包方法,请建议如何定制此方法

您是否打算实现此嵌套循环以本地化所有实体的验证消息?我认为不是。更好的解决方案是使用
验证器
属性

对于您的班级:

 [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");
        }
    }
公共类HomeValidator:AbstractValidator
{
公共HomeValidator()
{
RuleFor(x=>x.LogoutLabel).NotEmpty().WithMessage(“您的本地化邮件”);
}
}

您最好创建并注册自己的DataAnnotationsModelMetadataProvider,您可以在其中覆盖错误消息。有关更多详细信息,请参见此处类似问题的答案

,但在这种情况下,我必须为可用的验证器编写规则。仅更改消息是不可能的吗?然后仅更改带有以下内容的消息:RuleFor(x=>x.LogoutLabel).WithMessage(“您的本地化消息”);看起来很有趣,让我检查一下,所以在这种情况下,对空或其他属性的验证会起作用,就像模型有多个属性,每个属性都有不同的验证注释,那么这个解决方案也会起作用?当一个属性有多个验证时会发生什么,另外,在这种方法中,我们必须明确地处理每个属性,难道我们不能扩展属性以便以更通用的方式完成吗?我在这里介绍了我的方法: