Ajax.ActionLink复制并插入整个视图到
本文关键字:视图 插入 ActionLink 复制 Ajax | 更新日期: 2023-09-27 18:06:57
在那个视图中。
我是MVC新手,正在为我阿姨的企业开发电子商务应用程序。我有一个产品列表页面与部分视图显示按类别搜索菜单。这一切都很好地与Html。ActionLink helper,但是当我切换到AJAX时,它更新了产品,但将整个List视图插入到我想要更新的div中(包括头和所有内容)。我假设它与我定义的UpdateTargetId有关,或者可能是布局(我不是css专家)。这里是:
ProductController:
public ViewResult List(string category, int page = 1)
{
JProductListViewModel model = new JProductListViewModel
{
JProducts = repository.JProducts
.Where(p => category == null || p.Category == category)
.OrderBy(p => p.ProductID).Skip((page - 1) * PageSize).Take(PageSize),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = category == null ?
repository.JProducts.Count() :
repository.JProducts.Where(x => x.Category == category).Count()
},
CurrentCategory = category
};
return View(model);
}
菜单部分:
@foreach (var link in Model)
{
<div class="catmenuitem">
@if (link != null)
{
@Ajax.RouteLink(link, "", new { controller = "Product", action = "List", category = link, page = 1 }, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace,
UpdateTargetId = "List", LoadingElementId = "loading", LoadingElementDuration = 1000 },
new { @class = link == ViewBag.SelectedCategory ? "selected" : null })
}
</div>
}
列表视图:
<div id="List">
@foreach (var p in Model.JProducts)
{
Html.RenderPartial("ProductSummary", p);
}
</div>
我得到的结果是整个List。cshtml视图被复制并插入到"List"div。我有一种感觉,这将是某种愚蠢的错误,但我似乎找不到它。
谢谢,Kwinsor5
您必须为List视图创建一个新的局部视图,将其命名为_List。然后更改列表视图以包含_List部分视图,并更改列表控制器以在AJAX请求的情况下返回_List部分视图。
List partial view _List:
<div id="List">
@foreach (var p in Model.JProducts)
{
Html.RenderPartial("ProductSummary", p);
}
</div>
列表视图:
<div></div>
@Html.Partial("_List", Model)
<div></div>
列表控制器更改:
if (Request.IsAjaxRequest())
{
return PartialView("_List", model);
}
现在你可以在列表视图和它的局部视图中添加不同的元素