Asp.net mvc Ajax分页mvc4
我需要帮助。 我正在用MVC4做一个简单的博客 Edit3:一般来说,概念如下:左侧是带有类别的导航栏,右侧是带有ajax分页的帖子。当你点击具体的帖子时,我们会转到包含帖子详细信息的页面 我有一个布局:Asp.net mvc Ajax分页mvc4,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,pagination,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Pagination,我需要帮助。 我正在用MVC4做一个简单的博客 Edit3:一般来说,概念如下:左侧是带有类别的导航栏,右侧是带有ajax分页的帖子。当你点击具体的帖子时,我们会转到包含帖子详细信息的页面 我有一个布局: <body> <div class="container-fluid"> <div class="row-fluid"> <div class="sidebar-nav-fixed fill">
<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>
@Html.Action(“GetCategories”、“Navigation”)
@RenderBody()
我从控制器返回带有分页的帖子列表。寻呼机创建指向控制器的ajax链接:
<a data-ajax=\"true\" data-ajax-method=\"GET\" data-ajax-mode=\"replace\" href=\"{0}\" data-page=\"{1}\">{2}</a>
如果我返回一个没有布局的局部视图,它只呈现为局部视图,但是ajax分页可以工作。若我返回一个带有布局的局部视图,它会被完美地呈现出来,ajax查询工作,控制器返回局部视图,但分页不工作
看法
@model PagingListViewModel
@*@{
Layout=“~/Views/Shared/_Layout.cshtml”;
}*@
@foreach(模型项中的var post)
{
@DisplayFor(=>post,“post”)
}
@DisplayFor(x=>x.PageInfo)
编辑:我使用自定义寻呼机。如果标志“isAjax”为真,它将生成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
);
}
private string generatePage链接(字符串链接文本,int页码)
{
var pageLinkValueDictionary=新的RouteValueDictionary(linkWithoutPageValuesDictionary);
pageLinkValueDictionary[页码]=页码;
var contextQueryString=requestContext.HttpContext.Request.QueryString;
foreach(contextQueryString中的字符串QueryString)
{
if(querystring.Equals(第页,StringComparison.OrdinalIgnoreCase)||
pageLinkValueDictionary.ContainsKey(查询字符串))
继续;
pageLinkValueDictionary.Add(querystring,contextQueryString[querystring]);
}
var virtualPath=RouteTable.Routes.GetVirtualPath(requestContext,pageLinkValueDictionary)==null
?字符串。空
:RouteTable.Routes.GetVirtualPath(requestContext,pageLinkValueDictionary)
.虚拟路径;
返回字符串格式(
伊萨克斯
“”
:“”,
虚拟路径、页码、链接文本
);
}
编辑2:
[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);
}
[HttpGet]
公共行动结果帖子(int?第页)
{
…对数据库的查询
返回AjaxPagingList(posts,“PostsList”)
}
受保护的ActionResult AjaxPagingList(IEnumerable ItemsObject,字符串视图)
其中TItem:class,其中TModel:class
{
var items=AutoMappingProvider.MapToList(itemsObjects);
var catalogViewModel=新分页列表视图模型
{
....
}
返回PartialView(视图、目录视图模型);
}
我解决了我的问题。我改变了部分观点:
@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)
@model PagingListViewModel
@{
Layout=Request.IsAjaxRequest()?空:“~/Views/Shared/_Layout.cshtml”;
}
@foreach(模型项中的var post)
{
@DisplayFor(=>post,“post”)
}
@DisplayFor(x=>x.PageInfo)
并将属性添加到链接数据ajax update=“…”中 我有点困惑。您是否返回初始页面请求的完整视图和ajax寻呼机请求的部分视图?能否显示处理ajax帖子的相关javascript?我使用自定义寻呼机。如果标志“isAjax”为true,它将生成ajax链接。控制器方法的第一个调用不是ajax,其他调用是通过链接形成的ajax页面。我做错了什么?您是否也可以显示正在处理这些请求的控制器操作?
@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)