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)中的值就会绑定到模型状态,这就是为什么您不必将模型传递回视图的原因。
作为旁注,我总是在调用