使用MVC 5我需要为DataAnnotation属性本地化ErrorMessage。 我收到以下错误
ERROR
属性参数必须是属性参数类型
的常量表达式,typeof表达式或数组创建表达式
在模型中
[Compare("Password", ErrorMessage = Resources.Account_Register_ConfirmPasswordErrorMessage)]
public string ConfirmPassword { get; set; }
知道怎么解决吗?
答案 0 :(得分:9)
您需要使用ErrorMessageResourceName
和ErrorMessageResourceType
属性。
例如:
[Compare("Password", ErrorMessageResourceName = "ConfirmPasswordErrorMessage", ErrorMessageResourceType=typeof(<<type_of_your_resoruce_class>>)]
public string ConfirmPassword { get; set; }
这里还有一个指向MSDN的链接,您可以在其中找到这两个属性的解释。
希望这有帮助!
此致 乌罗什
答案 1 :(得分:1)
您不需要任何东西,只需在正确的位置创建资源文件。
例如资源&gt; ViewModels&gt; LoginVm.en-US.resx
在LoginVm中: [必需(ErrorMessage =&#34;სახელიარისაუცილებელი&#34;)]&lt; (这是格鲁吉亚语)
并在LoginVm.en-US.resx中添加
სახელიარისაუცილებელი&gt; UserName是必需的
并且全部完成。
答案 2 :(得分:0)
Here是如何执行此操作的详细说明:
您将适当的区域性resx文件添加到常规文件夹中,并告诉DA引擎对其进行浏览:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddDataAnnotationsLocalization(options => {
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
});
}
因此对于此模型:
public class RegisterViewModel
{
[Required(ErrorMessage = "The Email field is required.")]
[EmailAddress(ErrorMessage = "The Email field is not a valid email address.")]
[Display(Name = "Email")]
public string Email { get; set; }
}
您将在以下位置之一添加resx文件:
对于非ASP.NET环境(例如WPF,WinForms或其他),请参见this答案。