【问题标题】:MVC 3 ModelState.IsValid with multiple ViewModels具有多个 ViewModel 的 MVC 3 ModelState.IsValid
【发布时间】:2011-07-30 11:39:42
【问题描述】:

假设我有一个由其他 3 个 ViewModel 组成的 ViewModel。一个包含项目列表,另一个包含具有 [Required] 属性的类的实例,然后是另一个其他项目的列表。

如果用户从两个列表中的任何一个中选择一项,我不希望第二个对象上的 [Required] 属性导致 ModelState 无效,因为如果用户选择其中一项,他们无需使用具有 [Required] 属性的项目填写表单。

我该如何解决这个问题?

【问题讨论】:

    标签: model-view-controller asp.net-mvc-3 viewmodel modelstate


    【解决方案1】:

    您可以使用 ModelState.Remove("KeyName") 删除“违规”验证。我有完全相同的场景并实现了以下内容:

    var MyModel = _someService.GetModelById(id);
    TryUpdateModel(MyModel);
    ModelState.Remove("MyModel.OffendingField");
    if (ModelState.IsValid)
    {
        ...
    }
    

    重要的是要确保这不会对代码的其他区域产生连锁反应。

    【讨论】:

    • 我认为我不会验证整个 ViewModel,而是按照您的建议有条件地验证受用户选择影响的模型。此外,这让我重新思考了应用程序的设计,幸运的是我找到了一些更好的方法来处理它,所以这不是一个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 2012-05-27
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多