数据注释中的本地化错误消息如何?

时间:2013-12-20 08:50:03

标签: c# asp.net asp.net-mvc asp.net-mvc-5

使用MVC 5我需要为DataAnnotation属性本地化ErrorMessage。 我收到以下错误

ERROR

  

属性参数必须是属性参数类型

的常量表达式,typeof表达式或数组创建表达式

在模型中

[Compare("Password", ErrorMessage = Resources.Account_Register_ConfirmPasswordErrorMessage)]
public string ConfirmPassword { get; set; }

知道怎么解决吗?

3 个答案:

答案 0 :(得分:9)

您需要使用ErrorMessageResourceNameErrorMessageResourceType属性。

例如:

[Compare("Password", ErrorMessageResourceName = "ConfirmPasswordErrorMessage", ErrorMessageResourceType=typeof(<<type_of_your_resoruce_class>>)]
public string ConfirmPassword { get; set; }

这里还有一个指向MSDN的链接,您可以在其中找到这两个属性的解释。

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.compareattribute(v=vs.110).aspx

希望这有帮助!

此致 乌罗什

答案 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文件:

  • 资源/ViewModels.Account.RegisterViewModel.fr.resx
  • 资源/ ViewModels /帐户/RegisterViewModel.fr.resx

对于非ASP.NET环境(例如WPF,WinForms或其他),请参见this答案。