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

ASP.NET MVC如何在不显式传递模型的情况下将模型传递给视图,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,以下是我看到的关于如何在控制器上进行验证的示例之一: [HttpPost] public ViewResult Create(MyModel response) { if (ModelState.IsValid) { return View("Thanks"); } else { return View(); } } 若存在验证错误,则调用返回视图方法时不带任何参数。显然,视图中有@Html.ValidationS

以下是我看到的关于如何在控制器上进行验证的示例之一:

[HttpPost]
public ViewResult Create(MyModel response)
{
    if (ModelState.IsValid)
    {
        return View("Thanks");
    }
    else
    {
        return View();
    }
}
若存在验证错误,则调用返回视图方法时不带任何参数。显然,视图中有@Html.ValidationSummary,并且模型具有所有必需的属性

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

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

返回视图响应

非常感谢

真诚地,
Vlad

这是因为这些值已绑定到模型状态,模型状态会传递回视图。这与为什么不能更改模型值并再次返回视图的问题相同。也就是说,假设我的Viewmodel上有以下属性

public string Name {get;set;}
使用下面的控制器,如果不清除ModelState或更新ModelState中的值,则无法更改ViewModel属性。试试看

[HttpPost]
public ViewResult Create(MyModel response)
{
    response.Name = response.Name + "Some Random String"
    return View();
}
name属性将保持不变。本质上,一旦发生ModelBinding,表单ViewModel中的值将绑定到模型状态,这就是您不必将模型传递回视图的原因


作为旁注,我总是在call to return视图中传递模型;,它看起来更正确,也更容易阅读,这是因为这些值已绑定到模型状态,并被传递回视图。这与为什么不能更改模型值并再次返回视图的问题相同。也就是说,假设我的Viewmodel上有以下属性

public string Name {get;set;}
使用下面的控制器,如果不清除ModelState或更新ModelState中的值,则无法更改ViewModel属性。试试看

[HttpPost]
public ViewResult Create(MyModel response)
{
    response.Name = response.Name + "Some Random String"
    return View();
}
name属性将保持不变。本质上,一旦发生ModelBinding,表单ViewModel中的值将绑定到模型状态,这就是您不必将模型传递回视图的原因


作为旁注,我总是在call to return视图中传递模型;,它看起来更正确,更容易阅读

很好的答案。非常感谢。根据我在本例中的理解,控制器返回与初始绑定模型相同的视图,因此不会发生新的视图构造。我知道值绑定到模型状态,我不知道模型状态是如何传递回视图的?我明天会看看是否能为您挖掘一些关于这方面的技术文章,这些文章可能会提供一些更深入的见解。模型状态作为每个视图固有的ViewData对象的一部分进行传递。这就是为什么您可以添加modelstate错误并在视图中显示它,而无需显式发送包含错误信息的对象。谢谢你,汤米。谢谢你的帮助,回答得很好。非常感谢。根据我在本例中的理解,控制器返回与初始绑定模型相同的视图,因此不会发生新的视图构造。我知道值绑定到模型状态,我不知道模型状态是如何传递回视图的?我明天会看看是否能为您挖掘一些关于这方面的技术文章,这些文章可能会提供一些更深入的见解。模型状态作为每个视图固有的ViewData对象的一部分进行传递。这就是为什么您可以添加modelstate错误并在视图中显示它,而无需显式发送包含错误信息的对象。谢谢你,汤米。我感谢你的帮助。