强类型视图 - 通过编辑/创建表单发布附加数据

3
我有一个简单的(希望如此)场景。
  • 座位表
  • 计算机表
  • SeatComputers表格(因为一个座位可以分配多台计算机)

我在“座位”上拥有一个强类型的“编辑”视图。我设法在该页面上获取多选列表,以便分配或取消分配计算机(使用jquery添加/删除项目)。

但是,当我提交表单时,选择列表的内容不会被发布到控制器操作中。

我认为这是因为“计算机”选择列表不是模型属性。

有没有办法将其他数据发布到模型属性之外的控制器中?

我的表格看起来像这样: alt text

2个回答

3

您不需要将此列表发布,因为您已将其存储到数据库中,并且甚至有一个存储库来获取它,对吧?因此,唯一需要发布的是用户选择,因为这是您不知道的唯一事物。在POST操作中使用存储库在您的视图模型中重建列表,就像在呈现表单的GET操作中所做的一样。

是否有任何方法可以在模型属性之外将附加数据发布到控制器?

当然可以,只需将它们作为输入字段包含在内,以便它们的值随POST一起发送,在您的控制器操作中:

[HttpPost]
public ActionResult Index(SomeViewModel model, string param1, string, param2)
{
    ...
}

但我再次坚持:在你的情况下不需要这个。

哇...现在我感觉很蠢...我只需要添加一个JQuery片段来“选择”我的多选列表中的所有项目,然后再提交就可以了。现在它可以工作了。你关于“发布用户选择”的话让我恍然大悟。谢谢。 - Nasir

0

我通常创建ViewModels,将视图所需的实体模型属性组合起来,然后指向该ViewModel,以便Visual Studio生成初始视图。

因此,不是使用System.Web.Mvc.ViewPage<Seats>,而是使用System.Web.Mvc.ViewPage<SeatEditorViewModel>

这样,您的视图所需的任何属性甚至都不必是实体的一部分。


谢谢你的建议,Lucas。对于这个模块,我想我会坚持使用由LINQ生成的ViewModel。然而,我肯定会在一些更复杂的页面中使用这种技术。 - Nasir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接