ASP.NET MVC4:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

我有以下代码:

[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."

解决这个问题的任何方法?

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

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

 [Display(Name = "GenreName", ShortName = "GenreShortName", Description = "GenreDescription", ResourceType = typeof(MyResources))] public string Genre { get; set; } 

错误消息显示“属性参数必须是常量表达式…”。

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

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

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

另请查看Darin的答案

回应很晚。

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

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

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