【问题标题】:MVC model properties and multiple forms on one viewMVC 模型属性和多个表单在一个视图上
【发布时间】:2015-07-23 16:20:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 正是我需要的。谢谢
    【解决方案2】:

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

    所以步骤是:

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

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 2015-09-04
      • 2020-02-19
      • 2011-07-04
      • 2014-06-25
      • 2014-08-15
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多