9

我有以下代码:

    [Required(ErrorMessage = MessageModel.translateMessage("required")))]
    [Display(Name= MessageModel.translateMessage("id"))]
    public string user_id { get; set; }

我正在尝试使错误消息动态化,但编译时出现错误。:

"An attribute argument must be a constant expression , typeof expression or array creation expression of an attribute parameter type."

这个问题有什么解决办法吗?

4

3 回答 3

12

首先,您创建一个 Resource .resx 文件,该文件将包含您的本地化字符串。

当您声明属性时,您设置了 ResourceType 参数。这会导致将 Name、ShortName 和 Description 参数用作资源键而不是值。

[Display(Name = "GenreName", ShortName = "GenreShortName", Description = "GenreDescription", ResourceType = typeof(MyResources))]
public string Genre { get; set; }
于 2013-02-21T12:12:23.090 回答
3

错误消息说“属性参数必须是常量表达式......”。

这意味着DisplayName属性的参数必须是常量表达式(例如字符串、整数等),或错误消息中列出的任何其他表达式类型。

如果你想本地化一个属性,那么你需要一个支持它的属性。如果你使用的是 ASP.Net 4,那么 DisplayAttribute 应该是这样的:

[Display(Name="ID",Resource=typeof(MessageModel.translateMessage("id")))]
public string user_id { get; set; }

也请检查达林的这个答案

于 2013-02-21T09:58:57.770 回答
2

很晚才回复。

DataAnnotations 参数值需要常量,实际字符串。所以,你不能在这里写一个方法。您是否需要任何类型的本地化然后创建资源文件。然后编写类似这样的代码。这里“RequiredField”和“Email”是在资源文件中创建的键,“ViewModelResource”是资源文件的名称。

[Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(ViewModelResource))]
[Display(Name = "Email", ResourceType=typeof(ViewModelResource))]
public string Email{ get; set; }

如果您想根据条件自定义消息,则根据条件创建自己的“自定义数据注释”。

于 2015-10-13T15:40:33.410 回答