MVC 模型属性和一个视图上的多个表单

MVC model properties and multiple forms on one view

我有一个一般性的问题,但有些事情让我很烦,一旦解释清楚,就会有很大帮助。我想知道模型是如何保存在视图中的。基本上,如果我在一个视图上有三个不同的表单,并且它们都使用相同的模型,但正在更新不同的属性,那么当每个表单提交给它自己的控制器操作时,它们是否都具有相同的模型状态?或者,如果模型的 属性 在呈现后未存储在页面上的某处,它是否会丢失且未保留?

是的,如果页面本身存储的属性不足以让 ASP.NET MVC 能够确定使用哪个模型 class 并重建它,它将是 "lost"(从某种意义上说,它不会在回发时重新构建您的模型对象;但您仍然可以使用 FormCollection 手动重建它)。

默认模型绑定通过简单地将 HTML form 值分配给模型对象的相应属性来工作。 (这不是绝对正确的;例如,您可以编写自定义模型绑定器,或采用其他方法,但出于您的要求(默认 MVC 模型绑定)的目的 - 它是 HTML表单字段<->模型属性关系。)

这就是为什么 hidden HTML input 字段经常用于保留用户不可编辑的模型属性的原因。

您可以为每个表单创建单独的 post 操作,即更改表单操作以使模型的状态不同。当您 post 一个表单并在控制器中捕获模型时,每个模型的状态都会不同。

所以步骤是:

  • 为控制器中的每个表单创建单独的 post 操作。
  • 将表单的操作参数更改为您在控制器中创建的参数。
  • 您现在可以使用普通模型了