2010-04-22 49 views

回答

32

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

使用ErrorMessageResourceTypeErrorMessageResourceName来代替您的资源。

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

注意,资源必须公共(可以在资源编辑器来设定)。

Setting resource access to public http://img402.imageshack.us/img402/504/98454371.jpg

+1

如果资源位于App_GlobalResources中,该怎么办?您无法更改全局资源的访问修饰符。您是否会被迫将这些资源转移到其他地方以便他们使用DataAnnotations? – 2010-04-22 08:55:06

+0

@JohanVauhkonen您可以将Build Action更改为'Embedded Resource'并将自定义工具更改为'PublicResXFileCodeGenerator' – 2013-09-19 23:50:12

+0

伟大的,谢谢! – 2014-07-04 17:00:00

0

这意味着你无法确定要传递到属性在runtime的参数的值,它必须是在compile time因此该值被嵌入到该组件。

错误消息值需要是一个常量表达式。

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

+0

并不能真正解决在OP的问题。 – AxelEckenberger 2010-04-22 07:34:10

+1

其实大卫的回答直接回答了问题。 – 2012-11-02 17:49:47

0

您应该看看该属性的ErrorMessageResourceNameErrorMessageResourceType属性。他们确实允许从资源中获取错误消息。

+0

如果从App_GlobalResources文件夹中提取ResourceType,该怎么办? – 2010-04-22 07:35:40

+0

Resources.RegistrationModel,在猜测? – 2010-04-22 07:39:11

+0

@Jova:在我的文章中看到编辑。 – AxelEckenberger 2010-04-22 07:41:26

1

尝试FluentModelMetaDataProvider

以强类型方式管理错误消息的资源。

是这样的:

using System.Web.Mvc.Extensibility; 

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

什么是错误消息告诉我?

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

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

Here's什么Skeet说这个。

1

请访问以下链接: http://code.msdn.microsoft.com/Getting-Started-WCF-RIA-1469cbe2/sourcecode?fileId=19242&pathId=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; } 
+0

+1用于显示使用此模式的属性的完整列表。特别是,很容易错过显示与其他显示不同。 “名称”是资源文件中的名称... – Elton 2015-06-19 15:41:45

相关问题