2010-03-22 48 views
1

我正在使用ASP.NET MVC 2,並使用視圖模型的每個視圖方法。我還使用Automapper將屬性從我的域模型映射到視圖模型。ASP.NET MVC 2中的模型綁定和驗證順序是什麼?

拿這個例子視圖模型(與驗證目的所需的數據註解屬性):

public class BlogPost_ViewModel 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Title { get; set; } 
    [Required] 
    public string Text { get; set; } 
} 

在帖子編輯視圖我使用的是富文本編輯器(CKEditor的)。由於CKeditor是一個HTML編輯器,理想情況下,我需要CKeditor在提交表單時對HTML進行編碼,以便ASP.NET的輸入驗證不會發生抱怨。這不是CKeditor內置此功能的問題,但是我需要在映射回域對象(通過Automapper)之前解碼CKeditor的輸出。

我想添加一個新的屬性(上述視圖模型)來解決這個問題,如下所示:

public string HTMLEncodedText { 
    get { return HTMLEncode(Text); } 
    set { Text = HTMLDecode(value); } 
} 

然後我可以在視圖此屬性綁定到CKEDITOR,但仍使用Automapper在控制器中映射「文本」屬性 - 所有這些都不需要關閉輸入驗證。

我的問題是:你知道ASP.NET MVC 2中的模型綁定和驗證過程是如何工作的嗎?所有模型屬性都是在驗證執行之前綁定的?或者每個單獨的屬性在設置時都會被驗證。我認爲理想的工作原理是,所有的屬性都需要在模型驗證之前進行設置。

回答

1

屬性先驗證然後綁定。因此,對於您的視圖模型,您可能必須在HTMLEncodedText屬性上設置[Required]而不是在Text屬性上。

+0

你是絕對正確的,我只是意識到我需要將所有的驗證屬性移動到新的屬性中,以供開箱即用的客戶端驗證工作。 – 2010-03-22 19:11:52