从ajax局部视图访问Main View数据

时间:2013-03-29 21:15:06

标签: asp.net-mvc-4

场合: 假设我们有一个产品列表,每个产品都有一堆订单。我有一个索引视图,其中包含模型中包含的产品列表。我遍历列表并在页面上显示产品列表。我为每个项目添加了一个jquery click事件,click事件为产品列表中的每个订单加载了一个局部视图。

订单部分视图如下所示:

@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加载一个带有单独部分视图的订单。

问题: 简单的解决方案是在订单模型中使用CustomerNameList。但是,我不想将这些数据加载到页面很多次。有没有办法可以将它放在ViewBag中或将其存储在其他地方,以便整个页面可以使用此列表?

备注: 我不想为所有订单使用一个局部视图(即将订单视图模型作为列表并在局部视图中迭代它)因为我希望能够单独提交每个订单(以保存它) ) 我也可能需要在页面的其他部分使用此客户列表。我想保留它。例如,我可能有一个显示新订单的按钮,这使用ajax加载一个parital视图,而部分视图也需要客户列表。我不想将这些数据多次发送到页面。

我可以这样做吗?

这只是一种不好的方法吗?

1 个答案:

答案 0 :(得分:0)

不太清楚为什么要为现有订单加载用户的下拉列表。这意味着您希望设施改变世界卫生组织的订单吗?

但是,如果必须,您可以将客户下拉列表作为一个客户类的空下拉列表加载,然后您可以进行内部调用以获取客户的json,然后加载所有类客户的实例,使用json调用客户数据的数据。

这将允许您列出50个订单,其中包含一个客户数据集。

但就个人而言,您应该使用外键与您的模型建立关系,或者使用已经添加到客户列表中的视图模型,如果他们点击了行,您也只希望向用户显示完整的订单详细信息显示完整的细节。

即使有人在屏幕上精神恍惚并点击所有50个看,你仍然可以毫不费力地处理这些请求,否则同样你也不可能有50个顾客都在那里看着篮子同时,或者50个客户都在一次搜索产品数据库!