2012-12-11 56 views
1

比方說,我得到了下面的實體框架 「Ruimte」 模式:ASP.NET MVC - 視圖模型驗證的最佳實踐

public class Ruimte 
{ 
    #region Constructor 

    public Ruimte() 
    { 
     Kenmerken = new List<Kenmerk>(); 
    } 

    #endregion 

    #region Properties 

    [Key] 
    public int Id 
    { 
     get; 
     set; 
    } 

    [Required] 
    public string Naam 
    { 
     get; 
     set; 
    } 


    public List<Kenmerk> Kenmerken 
    { 
     get; 
     set; 
    } 

    #endregion 
} 

與 「Kenmerk」 模型看起來如下:

public class Kenmerk 
{ 
    #region Properties 

    [Key] 
    public int Id { get; set; } 

    public KenmerkOptie KenmerkOptie 
    { 
     get; 
     set; 
    } 

    [Required] 
    public int KenmerkOptieId 
    { 
     get; 
     set; 
    } 

    [Required] 
    public string Waarde 
    { 
     get; 
     set; 
    } 

    [Required] 
    public int RuimteId 
    { 
     get; 
     set; 
    } 

    #endregion 
} 

而且在我的Ruimte/Create視圖中,有兩個字段用於添加「Kenmerk」。現在,如果沒有KenmerkOptieId或Waarde,「Kenmerk」不能進入數據庫。因此,每次我嘗試發佈表單時,視圖都會因爲驗證而拒絕提交。雖然我想要一個「Ruimte」有或沒有「Kenmerk」。

所以我選擇的解決方案是使用「RuimteCreateViewModel」屬性「名稱」是必需的,另一個copmlex類名爲「KenmerkCreateViewModel」的列表。現在在這最後一個視圖模型中,KenmerkOptieId和Waarde不是必需的,所以我最終可以提交表單。

雖然我不認爲這是「跳過」所需字段驗證程序的最佳解決方案。那麼當數據庫驗證與視圖驗證不同時,你的「最佳實踐」是什麼?

回答

1

我認爲xVal - ASP.NET MVC的驗證框架,請參閱http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/對您嘗試開發的實體框架模型非常有用。特別是使用強制服務器端驗證,它允許您選擇在屬性設置器中驗證簡單屬性格式設置規則。有關說明,請參閱http://blog.stevensanderson.com/2008/09/08/thoughts-on-validation-in-aspnet-mvc-applications/

+0

您提供的鏈接看起來不錯,我會在接受問題之前進一步研究它們。感謝您的回覆,我會再回來告訴你,如果這是我正在尋找的。 – Julian