我有以下代码:
[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."
针对此问题的任何解决方案?
答案 0 :(得分:10)
首先创建一个Resource .resx文件,它将包含您的本地化字符串。
声明属性时,设置ResourceType参数。这会导致Name,ShortName和Description参数用作资源键而不是值。
[Display(Name = "GenreName", ShortName = "GenreShortName", Description = "GenreDescription", ResourceType = typeof(MyResources))]
public string Genre { get; set; }
答案 1 :(得分:3)
错误消息显示“属性参数必须是常量表达式......”。
这意味着DisplayName
属性的参数必须是常量表达式(例如字符串,整数等),或者错误消息中列出的任何其他表达式类型。
如果你想本地化一个属性,那么你需要一个支持它的属性。如果你使用的是ASP.Net 4,那么DisplayAttribute应该是这样的:
[Display(Name="ID",Resource=typeof(MessageModel.translateMessage("id")))]
public string user_id { get; set; }
另请查看Darin的answer
答案 2 :(得分:2)
很晚才回应。
DataAnnotations param值需要常量,实际字符串。 所以,你不能在这里写一个方法。您是否需要任何类型的本地化然后创建资源文件。然后编写类似这样的代码。这里“RequiredField”和“Email”是在资源文件中创建的密钥,“ViewModelResource”是资源文件的名称。
[Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(ViewModelResource))]
[Display(Name = "Email", ResourceType=typeof(ViewModelResource))]
public string Email{ get; set; }
如果您想在条件上自定义消息,那么创建您自己的“自定义数据注释”取决于条件。