2010-04-22 26 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

相關問題