为什么返回View() - 并返回View(MyModelName)都将[invalid]模型传递回视图(MVC 5)

时间:2016-09-13 14:39:42

标签: asp.net-mvc asp.net-mvc-5

我有一个MVC 5网站 - 带有控制器。如果是ModelState.IsValid - 那么我会执行一些操作。

如果它无效,我需要告诉用户错误(在ViewBag.Message中) - 并将无效模型传递回视图,以便用户可以查看和编辑它。

所以这在控制器动作结束时起作用:

return View(MyModelName);

然而 - 为什么这也有效?:

return View():

为什么我不需要明确地传回无效模型?即便如此,也不会将空白模型传回视图:

return View(new MyModelName());

我必须执行:

ModelState.Clear();

获取视图的空白模型。有人可以向我解释为什么它会像这样,所以我可以理解发生了什么。

我在谷歌上找不到任何关于此的内容。感谢。

1 个答案:

答案 0 :(得分:1)

因为它首先检查ModelState dictionary以查看是否存在任何值。如果是,那些将用于呈现表单输入字段的值。

当您致电ModelState.Clear()时,它会清除模型状态字典。由于模型状态字典为空,现在它将回退到传递给视图的模型并使用它。这就是您可以在视图中查看视图模型的任何更新属性值的原因,如果您在操作方法中更新属性值并返回查看。