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

C# MVC模型属性和一个视图上的多个表单,c#,.net,asp.net-mvc,modelstate,C#,.net,Asp.net Mvc,Modelstate,我有一个一般性的问题,但有些东西让我很难受,一旦解释了,就会有很大帮助。我想知道这些模型是如何保存在视图中的。基本上,如果我在一个视图上有三个不同的表单,它们都使用相同的模型,但正在更新不同的属性,那么当每个表单提交到其自己的控制器操作时,它们是否都具有相同的模型状态?或者,如果模型的某个属性在渲染后没有存储在页面的某个位置,它是否会丢失而不被保留?是的,如果页面上存储的属性不足,ASP.NET MVC无法确定使用哪个模型类并重建它,它将“丢失”(由于它不会在回发时重新构建模型对象而丢失;但是您

我有一个一般性的问题,但有些东西让我很难受,一旦解释了,就会有很大帮助。我想知道这些模型是如何保存在视图中的。基本上,如果我在一个视图上有三个不同的表单,它们都使用相同的模型,但正在更新不同的属性,那么当每个表单提交到其自己的控制器操作时,它们是否都具有相同的模型状态?或者,如果模型的某个属性在渲染后没有存储在页面的某个位置,它是否会丢失而不被保留?

是的,如果页面上存储的属性不足,ASP.NET MVC无法确定使用哪个模型类并重建它,它将“丢失”(由于它不会在回发时重新构建模型对象而丢失;但是您仍然可以使用
FormCollection
手动重新构建它)

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


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

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

因此,步骤如下:

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

正是我需要的。谢谢