首页 文章

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

提问于
浏览
16

我为什么不能这样做?

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

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

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

5 回答

  • 1

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

    请改用 ErrorMessageResourceType 和_2800330来指定您的资源 .

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

    请注意,资源必须是 public (可以在资源编辑器中设置) .

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

  • 0

    请看这个链接: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; }
    
  • 2

    试试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对此有何评价 .

  • 40

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

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

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

  • 0

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

相关问题