ASP.NET MVC如何在不显式传递模型的情况下将模型传递给视图

How does ASP.NET MVC pass model to the view without explicitly passing it

这是我所见过的关于如何在Controller上进行验证的示例之一:

1
2
3
4
5
6
7
8
9
10
11
12
[HttpPost]
public ViewResult Create(MyModel response)
{
    if (ModelState.IsValid)
    {
        return View("Thanks");
    }
    else
    {
        return View();
    }
}

如果存在验证错误,则将调用不带任何参数的return View()方法。显然,您的视图和模型中有@ Html.ValidationSummary(),具有所有必需的属性属性。

使用验证摘要呈现视图时,将保留并再次显示输入到表单中的数据。

我的问题:数据如何保存?由于它没有像

一样传递给视图

return View(response);

非常感谢。

此致,
弗拉德


这是因为值已绑定到模型状态,该状态又传递回视图。这是关于为什么不能更改模型值并再次返回视图的相同问题。意思是,假设我在Viewmodel

上具有以下属性

1
public string Name {get;set;}

使用下面的控制器,我不能在不清除ModelState或更新模型状态下的值的情况下更改ViewModel属性。试试吧!

1
2
3
4
5
6
[HttpPost]
public ViewResult Create(MyModel response)
{
    response.Name = response.Name +"Some Random String"
    return View();
}

name属性将保持不变。本质上,一旦发生ModelBinding,表单(ViewModel)中的值就会绑定到模型状态,这就是为什么您不必将模型传递回视图的原因。

作为旁注,我总是在调用return View();的过程中将模型传递回去,它看起来更正确并且更容易阅读