2013-03-29 53 views
0

局勢: 讓我們說,我們有一個產品的列表,並且每個都有一堆訂單。我有一個我的索引視圖,它包含模型中包含的這個產品列表。我遍歷列表並在頁面上顯示產品列表。我爲每個項目添加一個jquery點擊事件,點擊事件爲產品列表中的每個訂單加載一個局部視圖。訪問主要查看數據從ajax局部視圖

令部分觀點是這樣的:

@model Order 
<p>@Model.orderNum</p> 
@Html.DropDownListFor(Order.CustomerName,CustomerNameList) 
<input type="submit"/> 

索引視圖應該是這樣的:

@model List<Products> 
@foreach(Product p in @Model) 
{<button class="product-button">@p.productId</button>} 
<div id="orderDiv"/> 

,那麼我會執行下面的javascript的產品每一個訂單:

$("#orderDiv").append($("<div></div>).load("MyController/Order/[order ID would go here]")); 

這將加載一個單獨的部分視圖爲每個訂單id pr oduct了。

問題: 簡單的解決方案是在Order Model中有CustomerNameList。但是,我不想將這些數據加載到頁面上很多次。有沒有一種方法可以將它放在ViewBag中或將它存儲在其他地方,以便此列表可用於整個頁面?

注意: 我不想用一個局部視圖,所有的訂單,因爲我希望能夠(即有順序視圖模型是一個列表,並在局部視圖遍歷它。)分別提交每個訂單(將其保存) 我也可能需要在我的頁面的其他部分使用此客戶列表。我想保持它可用。例如,也許我有一個按鈕,說新的訂單,這使用ajax加載一個部分視圖,部分視圖也需要客戶名單。我不想將這些數據發送到頁面那麼多次。

我可以這樣做嗎?

這只是一個不好的方法來做到這一點?

+0

不建議朝這個方向思考。理想情況下,您的渲染數據將從頂部視圖流向「兒童」。如果您想要傳遞任何信息,請使用部分模型進行操作。不同的流程將變成「意大利麪條」... –

+0

因此,如果產品有50個訂單,那麼您的推薦是正確的方法,即將服務器的下拉列表加載到客戶端50次。一次用於呈現訂單的每個部分視圖。 – kralco626

+0

yigh,這聽起來很乏味。不,如果你的問題是這樣指導的,我會盡力避免,如果我能。 –

回答

0

不太確定爲什麼你想加載用戶的下拉列表,已經存在的訂單。那意味着你想讓該設施改變世衛組織的命令?然而,如果您必須,您可以將客戶下拉列表作爲一個空的下拉列表加載到一類客戶中,然後您可以進行內部調用以獲取客戶的json,然後加載所有類的實例客戶,以及來自客戶數據的json調用的數據。

這將允許您列出50個訂單,並帶有一個客戶數據集合。個人而言,您應該使用外鍵與您的模型建立關係,或者使用已經添加到您的客戶列表中的視圖模型,您也只希望向用戶顯示完整的訂單詳細信息,如果他們點擊排顯示全部細節。

即使有人在屏幕上精神恍惚,並點擊了所有50個人看,你仍然應該能夠處理這些請求沒有太多麻煩,否則,同樣你不能有50個客戶都在看那裏籃子在同時,或50個客戶一次搜索產品數據庫!