2010-09-08 30 views
3

我有一个简单的(希望)场景。强类型视图 - 通过编辑/创建表格发布附加数据

  • 座位表
  • 计算机表
  • SeatComputers表(因为座位可以分配多个计算机)

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

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

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

无论如何要将额外的数据发布到模型属性之外的控制器吗?

我的表是这个样子: alt text

回答

3

您不需要发布此列表,因为您已经将它存储到数据库中,并且您甚至有一个存储库来获取它,不是吗?所以唯一需要发布的是用户选择,因为这是你唯一不知道的。在POST操作中,使用存储库重建视图模型中的列表,这与在呈现表单的GET操作中执行的操作方式相同。

反正是有职位的 模型的属性之外的附加 数据控制器?

当然,简单地把它们作为输入字段,以便它们的值沿着职位和你的控制器动作派:

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

但我再次坚持:你不需要这个你案件。

+0

哇......现在我觉得很蠢......我只需要添加一个JQuery代码片段,在提交之前“选择”我的多选列表中的所有项目。它正在工作。你点击了“发布用户选择”的字样。谢谢。 – Nasir 2010-09-08 21:19:53

0

我通常创建的ViewModels,结合无论从实体模型视图需求,那么在这一点上的Visual Studio的属性生成初始视图。

所以不是System.Web.Mvc.ViewPage<Seats>这将是System.Web.Mvc.ViewPage<SeatEditorViewModel>

这样一来,无论性能视图的需求甚至不必是一个实体的一部分。

+0

感谢卢卡斯的建议。对于这一个模块,我想我会坚持由LINQ生成的ViewModel。但是,我肯定会将这种技术用于一些更复杂的页面。 – Nasir 2010-09-08 21:22:37