【问题标题】:Validation using ModelState MVC使用 ModelState MVC 进行验证
【发布时间】:2012-08-31 09:28:57
【问题描述】:

我是 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 模型。

首先是否可能,然后如何。或者如果不可能,那么任何解决方法都在那里。请帮助我卡住了,我希望我的问题很清楚

【问题讨论】:

  • 不要在视图模型中使用视图模型。为每个视图使用单独的模型。 (或者如果对您的应用有意义,则共享具有多个视图的单个模型)。为了验证输入,在可能的情况下,最好将复杂对象排除在视图模型之外。数据注释不会深入到复杂的属性中。
  • 你能显示控制器动作的代码吗?
  • 感谢您的回复。我想我会像四十二所说的那样把观点分开,让事情变得简单。

标签: c# asp.net-mvc validation


【解决方案1】:

正如四十二在上面的评论中所说,不要在模型中保留复杂的对象,这不值得麻烦。当我开始在 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; }
}

这样,您可以使用映射器库来帮助自己从域中的对象中提取和平坦化(ValueInjecter 或 AutoMapper 我都使用)。这样更好:)。

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 2010-10-27
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多