我有一个普遍的问题,但是有些事情会让我失望,一旦解释过,它将会有很大帮助。我想知道如何在视图中保留模型。基本上,如果我在一个视图上有三个不同的表单,并且它们都使用相同的模型,但是正在更新不同的属性,那么当每个表单都提交给自己的控制器操作时,它们是否都具有相同的模型状态?或者,如果模型的属性在渲染后未存储在页面的某个位置,是否会丢失并且不会保留?
答案 0 :(得分:1)
是的,如果页面本身没有足够的属性供ASP.NET MVC能够确定使用哪个模型类并重新构建它,那么它将会丢失" (丢失的意思是它不会在回发时重新构建模型对象;但您仍然可以使用FormCollection
手动重建它)。
默认模型绑定只需将HTML form
值分配给模型对象的相应属性即可。 (这不是绝对正确的;例如,您可以编写自定义模型绑定器,或采取其他方法,但出于您要求的目的(默认MVC模型绑定) - 它是HTML表单字段< - >模型属性关系。)
这就是hidden
HTML input
字段经常用于保存用户不可编辑的模型属性的原因。
答案 1 :(得分:1)
您可以为每个表单创建单独的发布操作,即更改表单操作,以便模型的状态不同。当您发布表单并在控制器中捕获模型时,每个表单的状态将不同。
步骤如下: