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

Mia*_*Win 8 c# asp.net-mvc data-annotations asp.net-mvc-4

我有以下代码:

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

我试图使错误消息动态,但我在编译时得到错误:

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

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

ywm*_*ywm 11

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

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

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


Kar*_*ala 3

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

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

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

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

另请检查达林的这个答案