2013-04-05 56 views
0

我承認,我發現了很多類似的問題,但不完全是這樣:)
我與數據註解的實體屬性:MVC 4手動驗證用數據詮釋

public class BaseEntity 
    { 
    [Required, DataType(DataType.DateTime)] 
    public DateTime CreatedAt { get; set; } 
    public string CreatedBy { get; set; } 
    } 
    public class ExchangeRights : BaseEntity 
    { 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    [Required, DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 
    } 

我嘗試驗證一個空對象:

ExchangeRights r = new ExchangeRights(); 
    ValidationContext vCtx = new ValidationContext(r); 
    List<ValidationResult> res = new List<ValidationResult>(); 
    Validator.TryValidateObject(r, vCtx, res, true); 

這只是結果一錯誤。電子郵件字段是必需的。但沒有表明沒有電子郵件格式,並且沒有指出CreatedAt字段沒有設置(好吧,也許這是因爲不可爲空值類型)
但是,這是一個轉折點。
首先,我真的希望每個錯誤都應該顯示爲空,它不是電子郵件格式。
但更大的問題是,如果我將電子郵件設置爲「asd」該方法返回沒有錯誤。
但是,如果我在創建頁面上使用具有強類型視圖的實體(在MVC4中使用Razor),那麼它就更加奇怪了。
該表格表明電子郵件是需要的,或者如果我設置了比它說的無效的電子郵件地址格式。 此外還指出CreatedAt字段是必需的(有或沒​​有必需的屬性!!),如果我把它設置它說無效的日期時間格式。

任何幫助/想法/預感將不勝感激。

感謝,
彼得

回答

1

你應該使用EmailAddress驗證屬性電子郵件的驗證。 [EmailAddress]

對於CreatedAt,由於DateTime是不可空類型,因此創建ExchangeRights實例時,CreatedAt屬性將填充DateTime.MinValue。所以這個屬性有一個價值。如果你想要一個不同的行爲,使用DateTime?而不是DateTime。

希望這會有所幫助。

1

由於以下原因,您可以使用DataTypeAttribute屬性:爲數據字段提供其他類型信息,以將自定義字段模板與數據字段相關聯。 DataTypeAttribute不用於驗證,它可以用於提供一些額外的元數據信息。要驗證電子郵件,您可以使用DataAnnotations Extensions EmailAttribute或編寫自己的驗證屬性。

你可以找到 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.datatypeattribute.aspx

+0

因此詳細信息,如果我理解正確的DataTypeAttribute是關於如何像顯示例如編輯字段:@ Html.EditorFor(型號=> model.NTAccount) – 2013-04-05 13:50:18