MVC 模型属性

本文关键字:属性 模型 MVC | 更新日期: 2023-09-27 18:30:55

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

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

我感谢任何建议;我不得不说,所有在线MVC模型绑定帮助似乎都引用了非常简单的例子,并不复杂。

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

MVC 模型属性

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

我不完全确定你的意思是需要单独的 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);
}

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