2010-08-07 60 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