2013-05-16 31 views
0

是否可以在代碼中設置範圍(或任何其他型號DataAnnotations屬性)並保持所有的DataAnnotations行爲?MVC set代碼中的數據註釋屬性

即我有一個十進制模型,我想在代碼中設置其最小值(例如在頁面加載時),我可以繼續使用ValidationMessageFor

我目前的 「靜態」 模型

[Required] 
[DisplayName("Price")] 
[RegularExpression(@"[0-9]+(\.[0-9][0-9]?)?$", ErrorMessage = "Invalid price format")] 
public decimal MinimumPrice { get; set; } 

謝謝!

回答

0

不,DataAnnotations在編譯時編譯到代碼中,不能在運行時更改。

如果你堅持使用DataAnnotations,那麼真的沒有別的選擇。

如果你願意做別的事情,那麼你有其他的選擇。你可以創建自己的屬性,從你選擇的變量中讀取值(儘管你不能傳遞一個變量)。

或者您可以使用FluentValidation。

+0

謝謝MMan,我會檢查一下。 – Salty

0

可以實現一些你想用流利的API是什麼:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<SomeClass>() 
     .Property(x => x.MinimumPrice) 
      .IsRequired() 
      .HasColumnType("decimal") 
      .HasPrecision(18, 2);  
      // default vals for decimal type. 18 = precision = how many digits in 
      // total. 2 = scale = digits after decimal     
} 

對於一些事情,最好用流利的配置和他人使用的標註。

Further reading

+0

這改變了數據庫,而不是視圖模型。 –