wog*_*les 7 ajax asp.net-mvc pagedlist
我无法弄清楚如何使用ajax获取部分视图来呈现分页列表.
我最接近它的工作是在部分视图中使用分页的例子,asp.net mvc
我基本上试图创建一个页面,其中包含每个用户的注释列表,其中页面可以像stackoverflow用户页面上的answers选项卡一样进行更改.
在第一次寻呼机点击时,分页工作正常,但是一旦我再次点击寻呼机,部分视图就会返回.
控制器:
public class ProductController : Controller
{
public IQueryable<Product> products = new List<Product> {
new Product{ProductId = 1, Name = "p1"},
new Product{ProductId = 2, Name = "p2"},
new Product{ProductId = 3, Name = "p3"},
new Product{ProductId = 4, Name = "p4"},
new Product{ProductId = 5, Name = "p5"}
}.AsQueryable();
public object Index()
{
return View();
}
public object Products(int? page)
{
var pageNumber = page ?? 1; // if no page was specified in the querystring, default to the first page (1)
var onePageOfProducts = products.ToPagedList(pageNumber, 3); // will only contain 25 products max because of the pageSize
ViewBag.OnePageOfProducts = onePageOfProducts;
return PartialView("_Products");
}
}
Run Code Online (Sandbox Code Playgroud)
浏览次数:
Index.cshtml:
<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" />
<h2>List of Products</h2>
<div id="products">
@Html.Action("Products", "Product")
</div>
@section scripts{
<script type="text/javascript">
$(function() {
$('#myPager').on('click', 'a', function() {
$.ajax({
url: this.href,
type: 'GET',
cache: false,
success: function(result) {
$('#products').html(result);
}
});
return false;
});
});
</script>
}
Run Code Online (Sandbox Code Playgroud)
_Products.cshtml:
@using PagedList.Mvc;
@using PagedList;
<ul>
@foreach(var product in ViewBag.OnePageOfProducts){
<li>@product.Name</li>
}
</ul>
<!-- output a paging control that lets the user navigation to the previous page, next page, etc -->
<div id="myPager">
@Html.PagedListPager((IPagedList)ViewBag.OnePageOfProducts, page => Url.Action("Products", new { page }))
</div>
Run Code Online (Sandbox Code Playgroud)
模型
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我我做错了什么吗?
wog*_*les 12
我最终使用了pagedlist源代码中不引人注目的ajax示例[ https://github.com/troygoode/PagedList][1]
局部视图:
@using PagedList;
@using PagedList.Mvc;
<ul id="names" start="@ViewBag.Names.FirstItemOnPage">
@foreach(var i in ViewBag.Names){
<li>@i</li>
}
</ul>
@Html.PagedListPager((IPagedList)ViewBag.Names, page => Url.Action("Index", new { page }), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing( new AjaxOptions(){ HttpMethod = "GET", UpdateTargetId = "unobtrusive"}))
Run Code Online (Sandbox Code Playgroud)
指数:
@{
ViewBag.Title = "Unobtrusive Ajax";
}
@using PagedList;
@using PagedList.Mvc;
@Styles.Render("~/Content/PagedList.css")
<h2>Unobtrusive Ajax</h2>
<p>Example of paging a list:</p>
<div id="unobtrusive">
@Html.Partial("UnobtrusiveAjax_Partial")
</div>
Run Code Online (Sandbox Code Playgroud)
控制器:
public class UnobtrusiveAjaxController : BaseController
{
// Unobtrusive Ajax
public ActionResult Index(int? page)
{
var listPaged = GetPagedNames(page); // GetPagedNames is found in BaseController
if (listPaged == null)
return HttpNotFound();
ViewBag.Names = listPaged;
return Request.IsAjaxRequest()
? (ActionResult)PartialView("UnobtrusiveAjax_Partial")
: View();
}
}
Run Code Online (Sandbox Code Playgroud)