【问题标题】:Separating GET and POST controller actions cleanly for form in MVC为 MVC 中的表单干净地分离 GET 和 POST 控制器操作
【发布时间】:2015-02-05 11:49:45
【问题描述】:

我有一个在控制器中填充大量数据的页面和一个表单。

我的问题实际上很简单:我必须在动作的 POST 版本中重复所有这些填充代码,还是有一些简化以仅处理发布的数据?

表单本身是一个局部视图,其余页面数据在发布时保持不变。

编辑:我查看了get-post-redirect,但我认为这对代码重复没有帮助。

【问题讨论】:

  • 重复什么人口代码?你指的是SelectLists吗?显示一些代码,以便我们了解您在做什么
  • 这完全取决于您的逻辑以及您是否真的需要为模型定义但未包含在表单中的值。如果您确实需要它们,那么显然您在处理之前将模型填充到控制器的 POST 中。没有代码重复,因为您将有一个方法来填充您将从 GET 和 POST 调用的模型。或者使用隐藏字段将所有数据填充到页面中,如果这不是安全问题的话。
  • 你可以创建一个辅助函数来执行代码,否则会被复制。然后只需在 GET 和 POST 操作中调用该函数
  • @GSerg gotcha,它实际上是一个相同的页面,带有表单验证错误或成功消息。所以我将把所有页面填充代码放入一个函数中。

标签: asp.net-mvc model-view-controller


【解决方案1】:

执行此操作的规定方法是使用包含用于填充模型的逻辑的 ViewModel。 ViewModel 上的“LoadData()”(或类似的)方法将从两个控制器操作中调用。

【讨论】:

  • 视图模型不应包含用于填充其属性的逻辑,尤其是不调用服务。视图模型仅包含在视图中显示/编辑所需的那些属性。
  • 很多关于此事的文章似乎不同意。例如:msdn.microsoft.com/en-us/library/ff798384.aspx.
  • 我对此表示怀疑,当这是 MVC 时,给我一个关于 MVVM 模式的文章的链接有什么意义
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2015-05-14
相关资源
最近更新 更多