2

场景:- 我正在开发 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);
    }  

在客户端进行验证时,它会向我显示旧消息“硬编码错误消息”。如果我们不想使用资源包方法,请建议如何定制

4

2 回答 2

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");
        }
    }
于 2012-12-20T07:45:47.073 回答
1

您最好创建并注册您自己的DataAnnotationsModelMetadataProvider,您可以在其中覆盖错误消息。有关更多详细信息,请在此处查看类似问题的答案MVC Validation Error Messages not hardcoded in Attributes

于 2012-12-20T10:19:58.313 回答