2010-08-07 64 views
3

我在我的MVC项目OrderProduct中有两个类。在ASP.NET MVC中发送项目集合

因为Product可以订购很多次,Order可以有很多产品我有第三个实体,它是OrderedProduct。它以多对多的关系连接这两个实体。

现在我想要做的就是让用户通过将产品从下拉列表中放到框中然后保存我的订单来下订单。另外,客户端必须填写订单实体中的一些文件,例如地址数据等。我想要的只是将其全部放在一个页面上。用户可以根据自己的喜好添加下拉项目,然后他可以添加整个订单。

为了使其更容易在这个画面想象一下:

Layout http://img245.imageshack.us/img245/4618/myimage.png

现在的问题是如何实现在我的MVC应用程序这样的行为。我应该建立一个ViewModel结合Order类和Product列表或使用Product类的部分视图?

而且这是我主要问题,我(以优雅的方式)如何可以检索POST请求后,控制器选择的产品或至少产品的id的完整列表?在这种情况下,我该如何指定我要发送的是ID的集合?添加一个对象很简单,但整个集合呢?

这是当我没有完全理解asp.net MVC的地方,所以请给我一些明智的想法;)对大家的问候,感谢所有你的答案!

回答

2

期望的界面似乎让我有点困惑,但这里是你如何处理这些事情......修改你的愿望。我将假设OrderedProduct是包含产品ID和数量的订购对象,您希望能够同时对它们进行全部修改。

制作Order您的ViewModel。鉴于它有一个名为OrderedProductsList<OrderedProduct>属性:
使用ViewModel的OrderedProduct创建一个小型编辑器控件。没有形式,只是一个文本框/下拉菜单/任何绑定到产品名称属性和一个文本框绑定到产品数量。 重要:把这个控件放在views/shared/EditorTemplates中,并把它叫做OrderedProduct.ascx。

给你的Order对象提供OrderedProduct类型的NewOrderedProduct属性。 在Order视图的窗体中执行:<%=Html.EditorFor(m=>m.OrderedProducts)%>这会给你一个可编辑的列表当前项目的顺序。
之后做:<%= Html.EditorFor(m=> m.NewOrderedProduct) %>这是你可以添加新项目的地方。
让[POST]动作采取Order的类型。

现在当它提交时,如果NewOrderedProduct属性有效,您可以将其添加到OrderedProducts列表并重新显示。你可以添加尽可能多的你想要的这种方式,他们都会自动绑定。

在提交订单的表单中有一个单独的提交按钮。检查[POST]中是否存在该按钮的名称,并一次全部提交。

这会为您带来一个直接的HTML工作版本。从那里你可以Ajaxify它,如果你想。

编辑
更新以反映OrderedProduct对象的功能和纠正型后接受

+0

这个例子是一种难以效仿。有可能看到一些代码吗? – Ciel 2010-10-22 13:31:37