2014-01-10 59 views
0

我正在使用ASP MVC的web應用程序。我正在構建一個頁面來編輯用戶的數據(模型USER,查看ModifyUser)。如何通過自定義ViewModel驗證模型的元數據?

我以這種方式驗證模型:

[MetadataType(typeof(USERS_Metadata))] 
public partial class USER 
{ 
    public class USERS_Metadata 
    { 
     [Required(ErrorMessage = "FALTA NOMBRE")] 
     [StringLength(30, ErrorMessage = "Nombre entre 3 y 30 caracteres", MinimumLength = 3)] 
     [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", ErrorMessage = "Error en el formato del nombre.")] 
     public string NAME { get; set; } 

然後我用自動地驗證用戶輸入的觀點:

<div class="editor-label"> 
     <%: Html.LabelFor(model => model.SURNAME) %> 
    </div> 
    <div class="editor-field"> 
     <%: Html.EditorFor(model => model.SURNAME) %> 
     <%: Html.ValidationMessageFor(model => model.SURNAME) %> 
    </div> 

問題是我的觀點也要去需要訪問一些其他使用自己模型的實體,如USERCATEGORY,這使得使用強類型視圖更不舒服。

此外,可能更重要的是,我不希望我的視圖必須處理甚至瞭解屬性,例如用戶的會話ID,目前我處理的是這樣的(我討厭它):

<%: Html.HiddenFor(model => model.SESSIONID) %> 

除非我完全錯誤,最理智的選擇是建立一個自定義的ViewModel。我決定構建我的ModifyUserViewModel以匹配USER中的那些字段,在我的視圖中需要這些字段,並從其他模型中添加幾個字段...但我不知道如何在USER中傳播元數據,我使用用於字段驗證,以及新的ViewModel。這個元數據是從數據庫自動構建的,拷貝它會讓我感到內在死亡,即使它工作。

什麼是典型的,最堅持的,最簡單的方法來驗證視圖像我目前正在做的,但與ViewModel?

+0

爲什麼你需要附加sessionId隱藏的?你在任何地方使用它? –

+0

如果我沒有,提交後它抱怨sessionId不能爲空(它試圖驗證整個模型)。 – jesusiniesta

回答

0

嘗試建立您的視圖模型的幾個域模型的集合:

public class MyViewModel { 
    public USER User { get; set; } 
    public USERCATETORY Category { get; set; } 
} 

看到一個偉大的文章here