2012-11-04 54 views
2

下面是一个例子,我已经看到了怎么办控制器上的验证:如何ASP.NET MVC通模型视图,而不明确地传递

[HttpPost] 
public ViewResult Create(MyModel response) 
{ 
    if (ModelState.IsValid) 
    { 
     return View("Thanks"); 
    } 
    else 
    { 
     return View(); 
    } 
} 

如果有验证错误,比返回View()方法被称为没有任何参数。很明显,您的视图和模型中有@ Html.ValidationSummary()具有所有必需的属性属性。

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

我的问题:数据如何保存?因为它没有传递到视图像

return View(response);

非常感谢。

此致 维拉德

回答

4

这是因为数值已经结合到其沿着该视图传递回模型的状态。这是关于为什么您无法更改模型值并再次返回视图的问题/问题。这意味着,假设我有以下财产上我的ViewModel

public string Name {get;set;} 

用下面的控制器,也没有任何清除的ModelState或更新模型中的状态值我不能改变视图模型属性。尝试一下!

[HttpPost] 
public ViewResult Create(MyModel response) 
{ 
    response.Name = response.Name + "Some Random String" 
    return View(); 
} 

name属性将保持不变。从本质上讲,一旦ModelBinding发生,来自窗体(ViewModel)的值将被绑定到模型状态,这就是为什么您不必将模型传递回视图。

作为一个方面说明,我总是传递模型回到我的呼吁return View();,它只是似乎更准确和更易于阅读

+0

伟大的答案。非常感谢+1。所以从我理解的情况来看,控制器返回与初始绑定模型相同的View,所以没有新的View构造发生。我知道值是绑定到模型状态,我没有得到如何模型状态传回给视图? –

+0

我会看看我是否可以在明天为您发掘一些技术文章,以便提供更多的见解 – Tommy

+1

Modelstate作为每个视图固有的ViewData对象的一部分传递。这就是为什么你可以添加一个模型状态错误,并让它显示在你的视图中,而不显式地发送带有错误信息的对象。 http://www.gxclarke.org/2010/05/consumption-of-data-in-mvc2-views.html – Tommy

相关问题