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

时间:2015-05-12 16:42:51

标签: c# .net asp.net-mvc modelstate

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

2 个答案:

答案 0 :(得分:1)

是的,如果页面本身没有足够的属性供ASP.NET MVC能够确定使用哪个模型类并重新构建它,那么它将会丢失" (丢失的意思是它不会在回发时重新构建模型对象;但您仍然可以使用FormCollection手动重建它)。

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

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

答案 1 :(得分:1)

您可以为每个表单创建单独的发布操作,即更改表单操作,以便模型的状态不同。当您发布表单并在控制器中捕获模型时,每个表单的状态将不同。

步骤如下:

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