2012-09-06 64 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我同时使用)的对象。它更好的方式:)。