2013-03-29 19 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个客户一次搜索产品数据库!