为什么我不能将资源用作具有DataAnnotations的ErrorMessage?

我为什么不能这样做?

[Required(ErrorMessage = "*")] [RegularExpression("^[a-zA-Z0-9_]*$", ErrorMessage = Resources.RegistrationModel.UsernameError)] public string Username { get; set; } 

告诉我的错误信息是什么?

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式。

使用ErrorMessage属性时,只能为其分配常量字符串或字符串文字。

请使用ErrorMessageResourceTypeErrorMessageResourceName来指定您的资源。

 [RegularExpression( "^[a-zA-Z0-9_]*$", ErrorMessageResourceType=typeof(Resources.RegistrationModel), ErrorMessageResourceName= "UsernameError" )] 

请注意,资源必须是公共的 (可以在资源编辑器中设置)。

设置资源访问公共http://img402.imageshack.us/img402/504/98454371.jpg

试试FluentModelMetaDataProvider 。

管理以强类型方式将资源用于错误消息。

看起来像这样:

 using System.Web.Mvc.Extensibility; namespace UI.Model { public class StoreInputMetadata : ModelMetadataConfigurationBase { public StoreInputMetadata() { Configure(m => m.Id) .Hide(); Configure(model => model.Name) .Required(Resources.Whatever.StoreIsRequired) .MaximumLength(64, Resources.Whatever.StoreNameLengthSomething); } } } 

告诉我的错误信息是什么?

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式。

它已经自我解释了。 C#不是像Ruby这样的动态语言,您可以编写在运行时inheritance随机基类的类。 🙂

以下是Skeet对此的评论。

请看这个链接: http//code.msdn.microsoft.com/Getting-Started-WCF-RIA-1469cbe2/sourcecode?fileId = 19242&pat​​hId = 774666288 (链接已损坏,但留待归属)

 public sealed partial class RegistrationData { [Key] [Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(ErrorResources))] [Display(Order = 0, Name = "UserNameLabel", ResourceType = typeof(RegistrationDataResources))] [RegularExpression("^[a-zA-Z0-9_]*$", ErrorMessageResourceName = "ValidationErrorInvalidUserName", ErrorMessageResourceType = typeof(ErrorResources))] [StringLength(255, MinimumLength = 4, ErrorMessageResourceName = "ValidationErrorBadUserNameLength", ErrorMessageResourceType = typeof(ErrorResources))] public string UserName { get; set; } 

这意味着您无法确定在runtime传递给属性的参数的值,它必须在compile time因此值将嵌入到程序集中。

错误消息值必须是常量表达式。

有关信息,属性参数只能是bool,byte,char,short,int,long,float,double,string,System.Type和enums类型。

您应该查看此属性的ErrorMessageResourceNameErrorMessageResourceType属性。 它们允许从资源中提取错误消息。