MVC - 如何在主布局页面中正确调用局部视图?
MVC - How to correctly call partial view in master layout page?
问题背景
我有一个名为'ProductDetail.cshtml 的页面,它使用了 masterLayout 页面。这个 MasterLayout 包含一个 PartialView,它用 'cart items' 填充一个下拉菜单,显示有多少项目,如下所示:
目前,当用户将商品添加到他们的购物车时,模态弹出窗口会显示新添加的商品,在模态关闭后,我需要更新购物车下拉列表以显示新更新的购物车商品编号MasterLayout.
代码:
'MasterLayout.cshtml' 显示 'Cart Item' 下拉菜单,'Cart' 方法 returns 返回 PartialView。:
<form class="navbar-form pull-right">
@Html.Action("MiniCart", "Cart")
</form>
'ProductDetail.cshtml' 使用 MasterLayout.cshtml.
<script>
$("#AddCartItem").click(function (e) {
e.preventDefault();
$.ajax({
url: '@Url.Action("AddToCart")',
type: 'POST',
data: {
"id": $('#productId').val(),
"qty": $('#productQty').val(),
"name": $('#productName').text(),
"price": $('#productPrice').text(),
"brand": $('#productBrand').text(),
"image": $('#productImage').val()
},
success: function (json) {
for (var i = 0; i < json.length; i++)
{
AddRows(json[i].CartItemImage,
json[i].CartItemName,
json[i].CartItemPrice,
json[i].CartItemQty,
json[i].CartItemBrand);
}
$("#dialog-example").modal('show');
}
});
});
$("#CloseModal").click(function (e) {
$('body').on('hidden.bs.modal', '.modal', function () {
$(this).removeData('bs.modal');
});
//****Attempt to call the PartialView of the MasterLayout to update drop-down
$.ajax({
url: '@Url.Action("MiniCart", "Cart")'
});
});
</script>
上面的JQuery在'success'方法中传回了一个返回的JSON对象CartItems列表。模态主体 table 内容在用户关闭模态时建立(如 ID '#CloseModal' 所示,我希望在 MasterLayout 中调用 PartialView 以更新 CartItems 下拉列表以显示新的价值。谁能指出我实现这一目标的正确方向?
您可以使用 JQuery 调用购物车操作方法,然后将 form
中的内容替换为新内容。
例子
<script>
$(document).ready(function() {
$.get('@Html.Url("MiniCart", "Cart")', function(data) {
$('.navbar-form').html(data);
});
});
</script>
在您的模式中,添加一个表单:
@using (Ajax.BeginForm("MiniCart","Cart",null, new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "cartDiv", OnSuccess = "$('#yourModalId').modal('hide');" }))
在您的模板上使用 UpdateTargetId 添加 div:
<form class="navbar-form pull-right">
<div id="cartDiv">
@Html.Action("MiniCart", "Cart")
</div>
</form>
并将模式上的关闭按钮更改为提交类型
注意:
不要忘记添加脚本:
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
问题背景
我有一个名为'ProductDetail.cshtml 的页面,它使用了 masterLayout 页面。这个 MasterLayout 包含一个 PartialView,它用 'cart items' 填充一个下拉菜单,显示有多少项目,如下所示:
目前,当用户将商品添加到他们的购物车时,模态弹出窗口会显示新添加的商品,在模态关闭后,我需要更新购物车下拉列表以显示新更新的购物车商品编号MasterLayout.
代码:
'MasterLayout.cshtml' 显示 'Cart Item' 下拉菜单,'Cart' 方法 returns 返回 PartialView。:
<form class="navbar-form pull-right">
@Html.Action("MiniCart", "Cart")
</form>
'ProductDetail.cshtml' 使用 MasterLayout.cshtml.
<script>
$("#AddCartItem").click(function (e) {
e.preventDefault();
$.ajax({
url: '@Url.Action("AddToCart")',
type: 'POST',
data: {
"id": $('#productId').val(),
"qty": $('#productQty').val(),
"name": $('#productName').text(),
"price": $('#productPrice').text(),
"brand": $('#productBrand').text(),
"image": $('#productImage').val()
},
success: function (json) {
for (var i = 0; i < json.length; i++)
{
AddRows(json[i].CartItemImage,
json[i].CartItemName,
json[i].CartItemPrice,
json[i].CartItemQty,
json[i].CartItemBrand);
}
$("#dialog-example").modal('show');
}
});
});
$("#CloseModal").click(function (e) {
$('body').on('hidden.bs.modal', '.modal', function () {
$(this).removeData('bs.modal');
});
//****Attempt to call the PartialView of the MasterLayout to update drop-down
$.ajax({
url: '@Url.Action("MiniCart", "Cart")'
});
});
</script>
上面的JQuery在'success'方法中传回了一个返回的JSON对象CartItems列表。模态主体 table 内容在用户关闭模态时建立(如 ID '#CloseModal' 所示,我希望在 MasterLayout 中调用 PartialView 以更新 CartItems 下拉列表以显示新的价值。谁能指出我实现这一目标的正确方向?
您可以使用 JQuery 调用购物车操作方法,然后将 form
中的内容替换为新内容。
例子
<script>
$(document).ready(function() {
$.get('@Html.Url("MiniCart", "Cart")', function(data) {
$('.navbar-form').html(data);
});
});
</script>
在您的模式中,添加一个表单:
@using (Ajax.BeginForm("MiniCart","Cart",null, new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "cartDiv", OnSuccess = "$('#yourModalId').modal('hide');" }))
在您的模板上使用 UpdateTargetId 添加 div:
<form class="navbar-form pull-right">
<div id="cartDiv">
@Html.Action("MiniCart", "Cart")
</div>
</form>
并将模式上的关闭按钮更改为提交类型
注意: 不要忘记添加脚本:
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>