我需要帮助。 我正在使用MVC 4做一个简单的博客。
Edit3 :一般来说,概念如下:左侧是带有类别的导航栏,右侧带有ajax分页的帖子。当您点击具体帖子时,我们转到包含帖子详细信息的页面。
我有一个布局:
<body>
<div class="container-fluid">
<div class="row-fluid">
<div class="sidebar-nav-fixed fill">
@Html.Action("GetCategories","Navigation")
</div>
<div class="sidebar-nav-fixed-stuck-left fill white">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="content-area">
@RenderBody()
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
我从带有分页的帖子的控制器列表返回。寻呼机创建到控制器的ajax链接:
<a data-ajax=\"true\" data-ajax-method=\"GET\" data-ajax-mode=\"replace\" href=\"{0}\" data-page=\"{1}\">{2}</a>
如果我返回没有布局的局部视图,则只渲染部分视图,但是ajax分页工作。如果我返回带有布局的局部视图,它会完美呈现,ajax查询工作,控制器返回局部视图,但分页不起作用。
查看
@model PagingListViewModel<PostViewModel>
@*@{
Layout = "~/Views/Shared/_Layout.cshtml";
}*@
@foreach (var post in Model.Items)
{
@Html.DisplayFor(_ => post,"Post")
}
@Html.DisplayFor(x => x.PageInfo)
编辑:我使用自定义寻呼机。如果标志“isAjax”为true,它会生成ajax链接。 这是一种为每个页面生成链接的方法
private string GeneratePageLink(string linkText, int pageNumber)
{
var pageLinkValueDictionary = new RouteValueDictionary(linkWithoutPageValuesDictionary);
pageLinkValueDictionary[Page] = pageNumber;
var contextQueryString = requestContext.HttpContext.Request.QueryString;
foreach (string queryStrings in contextQueryString)
{
if (queryStrings.Equals(Page, StringComparison.OrdinalIgnoreCase) ||
pageLinkValueDictionary.ContainsKey(queryStrings))
continue;
pageLinkValueDictionary.Add(queryStrings, contextQueryString[queryStrings]);
}
var virtualPath = RouteTable.Routes.GetVirtualPath(requestContext, pageLinkValueDictionary) == null
? string.Empty
: RouteTable.Routes.GetVirtualPath(requestContext, pageLinkValueDictionary)
.VirtualPath;
return string.Format(
isAjax
? "<li><a data-ajax=\"true\" data-ajax-method=\"GET\" data-ajax-mode=\"replace\" href=\"{0}\" data-page=\"{1}\">{2}</a></li>"
: "<li><a href=\"{0}\" data-page=\"{1}\">{2}</a></li>",
virtualPath, pageNumber, linkText
);
}
Edit2:
[HttpGet]
public ActionResult Posts(int? page)
{
... query to database
return AjaxPagingList<Post, PostViewModel>(posts, "PostsList")
}
protected ActionResult AjaxPagingList<TItem, TModel>(IEnumerable<TItem> itemsObjects, string view)
where TItem : class, where TModel: class
{
var items = AutoMappingProvider.MapToList<TItem>(itemsObjects);
var catalogViewModel = new PagingListViewModel<TModel>
{
....
}
return PartialView(view, catalogViewModel);
}
答案 0 :(得分:0)
我解决了我的问题。我改变了部分观点:
@model PagingListViewModel<PostViewModel>
@{
Layout = Request.IsAjaxRequest() ? null : "~/Views/Shared/_Layout.cshtml";
}
@foreach (var post in Model.Items)
{
@Html.DisplayFor(_ => post,"Post")
}
@Html.DisplayFor(x => x.PageInfo)
并将属性添加到链接数据-ajax-update =“...”。