不知道算不算另类的ASP.NET MVC4 Ajax分页

以往用Ajax来实现无刷新分页,用户一按F5,页数就记不住了,点了一个链接也是同一个问题,再想回退回来,就回到第一页了。上次看到一篇文章,说到window.location.hash的用途,于是萌生了这么一个想法,把这个用来保存Ajax的状态。

大概的实现思路是这样的:页面监听window.onhashchange事件,然后通过Ajax向后台请求分页内容,再替换掉原来的分页结果。当然这个方法要一开始也执行一下,用来应对回退功能。

代码大概如下:  

 

@{
    ViewBag.Title = "Index";
}

<h2>Indexh2>
<div id="MainDiv">div>

@section scripts{
    <script>
        function GoToPage(PageIndex) {
            $.ajax({
                url: '@Url.Action("GetPage")',
                    data: { Page: PageIndex },
                    success: function (data) {
                        $("#MainDiv").html(data);
                    }
                });
            }

            function GetLocationHash() {
                //var IsGotoPage = false;
                var PageIndex = 1;
                var m = window.location.hash.slice(1).split("&");
                for (var i = 0; i < m.length; i++) {
                    var item = m[i];
                    if (item.indexOf("Page=") > -1) {
                        PageIndex = item.slice(5);
                    }
                }
                GoToPage(PageIndex);
                //alert(values);
            }
            window.onhashchange = GetLocationHash;
            GetLocationHash();
    script>
}
Index.cshtml

 

@model IEnumerable<dynamic>
<table>
    <thead>
        <tr>
            <th>编号th>
            <th>内容th>
            <th>日期th>
            <th>操作th>
        tr>
    thead>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @item.ID
            td>
            <td>
                @item.Content
            td>
            <td>
                @item.UpdateDate
            td>
            <td>
                @Html.ActionLink("查看", "Detail", new { ID = item.ID })
            td>
        tr>    
    }
table>
<ul>
    @for (int i = 1; i <= ViewBag.PageCount; i++)
    {
        if (i == ViewBag.PageIndex)
        {
        
  • ="display: inline-block"><span>@ispan>li> } else { <li style="display: inline-block"><a href="#Page=@i">@ia>li> } } ul>
  • GetPage.cshtml

     

    你可能感兴趣的:(不知道算不算另类的ASP.NET MVC4 Ajax分页)