我使用RenderAction在主要(定价视图)视图中显示部分视图(购物车)
<% Html.RenderAction("Cart", "ShoppingCart"); %>
当用户在主视图上将项目添加到购物车时,我必须更新部分视图以显示新添加的项目。以下是我的部分视图的代码:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Trl.ViewModels.Cart>" %>
<% foreach (var _hotel in Model.Hotels)
{ %>
Hotel Name: <%: _hotel.Name %> <br/>
Price: <%: _hotel.TotalPrice %>
<% } %>
上面用户控件中使用的“Trl.ViewModels.Cart”对象将包含新添加的项目,因为我使用ASP.NET会话状态来持久化Cart。如何从我的主视图刷新/重新加载这个局部视图,以便它可以显示新添加的项目?
答案 0 :(得分:16)
我假设主要内容区域是通过ajax更新的。如果是这种情况,那么我的方法是通过ajax和控制器操作进行更新,返回包含侧边栏购物车的部分视图。为此,您需要一个包含该购物车的div的命名ID,以便将其作为更新站点进行定位。
不用多说,快速代码演示我的意思:
控制器:
public ActionResult Create(Cart item)
{
if (ModelState.IsValid)
{
// or could be added to session["cart"] etc..
_repository.Add(item);
var cartItems = _repository.Find(x => x.cartID = item.cartID);
return PartialView("CartMini", cartItems);
}
return new EmptyResult();
}
主视图(在右栏中 - 这将是您最初定义局部视图的位置):
<div id="miniCart"></div>
在页面的另一部分(半伪代码):
<script type="text/javascript">
function updateCart() {
var tdata = $(frm).serialize();
// or your data in the format that will be used ??
$.ajax({
type: "POST",
data: tdata,
url : '<%= Url.Action("Create", "Cart") %>',
dataType: "json",
success: function (result) { success(result); }
});
});
function success(result){
$("#miniCart").html(result);
}
</script>
这真的是需要的东西。对不起匆匆这个,已经开始前一段时间和电话去了,现在必须要关闭:)。如果以后不清楚,将进一步增加。