2011-11-17 64 views
1
  1. 我希望能夠顯示正在使用的特定文化的錯誤消息。使用數據註釋本地化MVC 3 Razor應用程序

  2. 我有一個使用DataAnnotations的模型,我也有幾個資源(resx)文件具有相同的錯誤消息,但使用不同的語言。

  3. 我知道我需要以某種方式將鏈接從數據註釋到消息的ID在我的資源文件中,但我不確定如何完成該操作的語法。

說例如我有下面的DataAnnotation文件。我需要將ErrorMessage文本鏈接到資源文件中的特定鍵。執行步驟3需要什麼樣的內容?

在additon,對於像郵政編碼或電話號碼(這裏它是一個不同的正則表達式的字段,我將不得不從模型取出該消息並把它應用到使用所述模型中的每個視圖?

或者,有沒有指定我可以在模型中使用的正則表達式的方法嗎?

using System; 
using System.ComponentModel.DataAnnotations; 
using DataAnnotationsExtensions; 

namespace YeagerTechModel 
{ 
    [MetadataType(typeof(Customer_Validation))] 
    public partial class Customer 
    { 

    } 

    public partial class Customer_Validation 
    { 
     public short CustomerID { get; set; } 

     [Required] 
     [StringLength(50)] 
     [DataType(DataType.EmailAddress)] 
     [Email] 
     public string Email { get; set; } 

     [StringLength(50, MinimumLength = 3, ErrorMessage = "Must have a minimum length of 3.")] 
     [DataType(DataType.Text)] 
     public string Company { get; set; } 

     [StringLength(50, MinimumLength = 3, ErrorMessage = "Must have a minimum length of 3.")] 
     [DataType(DataType.Text)] 
     public string FirstName { get; set; } 

     [StringLength(50, MinimumLength = 3, ErrorMessage = "Must have a minimum length of 3.")] 
     [DataType(DataType.Text)] 
     public string LastName { get; set; } 

     [StringLength(50, MinimumLength = 3, ErrorMessage = "Must have a minimum length of 3.")] 
     [DataType(DataType.Text)] 
     public string Address1 { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.Text)] 
     public string Address2 { get; set; } 

     [StringLength(50, MinimumLength = 3, ErrorMessage = "Must have a minimum length of 3.")] 
     [DataType(DataType.Text)] 
     public string City { get; set; } 

     [StringLength(2, MinimumLength = 2, ErrorMessage = "Must have a length of 2.")] 
     [DataType(DataType.Text)] 
     public string State { get; set; } 

     [StringLength(10)] 
     [DataType(DataType.Text)] 
     [RegularExpression(@"^\d{5}(-\d{4})?$", ErrorMessage = "Invalid Zip")] 
     public string Zip { get; set; } 

     [StringLength(12)] 
     [DataType(DataType.PhoneNumber)] 
     [RegularExpression(@"^\s*([\(]?)\[?\s*\d{3}\s*\]?[\)]?\s*[\-]?[\.]?\s*\d{3}\s*[\-]?[\.]?\s*\d{4}$", ErrorMessage = "Invalid Phone")] 
     public string HomePhone { get; set; } 

     [StringLength(12)] 
     [DataType(DataType.PhoneNumber)] 
     [RegularExpression(@"^\s*([\(]?)\[?\s*\d{3}\s*\]?[\)]?\s*[\-]?[\.]?\s*\d{3}\s*[\-]?[\.]?\s*\d{4}$", ErrorMessage = "Invalid Phone")] 
     public string CellPhone { get; set; } 

     [StringLength(100)] 
     [DataType(DataType.Url)] 
     [Url] 
     public string Website { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.EmailAddress)] 
     [Email] 
     public string IMAddress { get; set; } 

     public System.DateTime CreatedDate { get; set; } 

     public Nullable<System.DateTime> UpdatedDate { get; set; } 
    } 
} 

回答

2

上有ValidationAttribute 2個屬性可以用於本地化的錯誤消息,他們是ErrorMessageResourceNameErrorMessageResourceType。更多見http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.aspx信息

你會使用它們像這樣:

[StringLength(50, MinimumLength = 3, ErrorMessageResourceName= "MinLength3", ErrorMessageResourceType = typeof(MyResource))] 
[DataType(DataType.Text)] 
public string Company { get; set; } 

因此,這將使用文件MyResource.resx和密鑰「MinLength3」。使用正則表達式同樣的作品,如:

[StringLength(12)] 
[DataType(DataType.PhoneNumber)] 
[RegularExpression(@"^\s*([\(]?)\[?\s*\d{3}\s*\]?[\)]?\s*[\-]?[\.]?\s*\d{3}\s*[\-]?[\.]?\s*\d{4}$", ErrorMessageResourceName= "InvalidPhone", ErrorMessageResourceType = typeof(MyResource))] 
public string CellPhone { get; set; } 

如果typeof運算(MyResource)不工作,那麼你可能需要將RESX文件的生成操作更改爲「嵌入的資源」,並設置「訪問修飾符」到「公共'在編輯resx文件時。

+0

如果您要關注本地化路線,還可以使用帶資源的DisplayAttribute - 它會公開ResourceType字段以及Name/Description/ShortName/Prompt等字段,以便您可以本地化顯示的標籤和工具提示UI在網頁中沒有額外的代碼。 –