2012-09-06 61 views
3

我是MVC的新手,所以請幫助我解決一個簡單的問題。我有一個類如下使用ModelState MVC驗證

public class FeedbackViewModel 
{ 
    [Required(ErrorMessage="Please enter feedback summary")] 
    public string strSummary { get; set; } 

    [Required(ErrorMessage = "Please enter feedback details")] 
    public string strDetail { get; set; } 
} 

那麼這FeedbackViewModel在其他視圖模型作爲

public class HomeIndexViewModel 
{ 
    public SearchViewModel SearchViewModels { get; set; } 
    public FeedbackViewModel FeedBackModel { get; set; } 
} 

我的問題是在控制器,當我做ModelState.IsValid(模型傳遞到動作控制器HomeIndexViewModel)總是無論我是否在FeedbackViewModel模型的字段中輸入任何值,都是如此。我需要在此操作中驗證FeedbackViewModel模型。

首先是可能然後如何。或者如果不可能,那麼任何工作都在那裏。請幫助我卡住了,我希望我的問題很清楚

+2

不要在viewModel中使用viewModel。爲每個視圖使用一個單獨的模型。 (或者如果您的應用有意義,可以共享包含多個視圖的單個模型)。爲了驗證輸入的目的,儘可能將複雜對象保留在視圖模型之外。數據註釋不會挖掘到複雜的屬性。 –

+0

可以顯示控制器操作的代碼嗎? – saml

+0

感謝您的回覆。我想我只是分開了四十二個說法,並保持簡單的意見。 –

回答

0

由於上述評論中有42篇文章並沒有將複雜的對象保留在模型中,所以不值得麻煩。當我開始在MVC工作時,我遇到了類似的問題,這些問題是通過展開模型來解決的。

對於當前的問題,你可以使用

public class HomeIndexViewModel 
{ 
    public SearchViewModel SearchViewModels { get; set; } // same thing as below. 

    [Required(ErrorMessage="Please enter feedback summary")] 
    public string FeedBackModelstrSummary { get; set; } 
    [Required(ErrorMessage = "Please enter feedback details")] 
    public string FeedBackModelstrDetail { get; set; } 
} 

有它這樣你可以幫助自己在您的域映射庫unflatt和平面(ValueInjecter或AutoMapper我同時使用)的對象。它更好的方式:)。