2

我的最终问题是——模型绑定器应该填充所有模型,还是只填充正在发布的位,让控制器填充其余部分?

例如,我在我的系统中添加一个产品,我希望用户在表单上选择新产品将出现在哪些站点上。因此,在我的模型中,我想填充一个名为“AllAvailableSites”的集合,以呈现供用户选择的复选框。我还需要在帖子上使用任何选定的站点填充模型,以防表单无法验证,并且我需要表示显示初始选择的表单。看来我应该让模型绑定器在模型上设置所选站点,并且(在控制器方法中)我在模型上设置“AllAvailableSites”。听起来对吗?在模型绑定器中设置所有内容似乎更有效,但有人认为这不太正确。

我很感激任何建议;不得不说,网上所有的MVC模型绑定帮助好像都举了很简单的例子,没什么复杂的。

另外,我真的需要方法的 GET 和 POST 版本吗?他们不能只采用相同的视图模型吗?然后我检查我的模型绑定器是否是 GET/POST,并相应地填充所有模型。

4

1 回答 1

0

你的初步结论是正确的。模型绑定器应该只关心创建模型的实例并使用它在操作上下文中可用的值(例如,发布值)填充其属性,然后执行验证。然后,您的控制器负责填充视图所需的任何其他值,例如您的可用站点列表。

我不完全确定您需要单独的 GET/POST 方法是什么意思。如果您正在保存或创建模型的实例,则应该发布,因此 GET 部分似乎无关紧要。除非你的意思是:

[HttpGet, ActionName("Edit")]
public ActionResult Edit(MyModel model)
{
   return View(model);
}

[HttpPost, ActionName("Edit")]
public ActionResult SaveEdit(MyModel model)
{
   // validate and save, then
   return View(model);
}

也许您想知道是否可以将它们组合到一个操作中,然后确定他们是否正在查看编辑表单或在操作中发布编辑表单的结果。我强烈建议您不要这样做。有多种原因,但让我们保持不变;不要这样做。

于 2012-04-12T09:21:50.057 回答