Fork me on GitHub

MvcPager 分页示例 — Ajax事件

本示例演示Ajax分页时如何处理Ajax事件。

Ajax事件有onbegin、onsuccess、onfailure和oncomplete。若在onbegin事件处理函数中返回false,则Ajax请求将被取消,后续的onsuccess、onfailure和oncomplete事件都不会被触发。 点击第二页将在服务器端返回500错误,因此会引发Ajax的onfailure事件。

序号 文章标题 作者 文章来源
41 吴起婚嫁习俗 Webdiyer 吴起热线
42 陕西省吴起县地税局税费收入突破17亿元大关 杨涛 吴起政府网
43 2012年吴起县人民政府工作报告 Webdiyer 吴起政府网
44 吴起:昔日红军长征落脚地 如今退耕还林第一县 杨涛 吴起热线
45 吴起县2013年春节文化系列活动安排 杨涛 吴起政府网
首页 上页 ... 2 3 4 5 6 7 8 9 10 11 下页 尾页 

View:

@model PagedList<article>
<div id="articles">
    @Html.Partial("_AjaxEvents",Model)
</div>
@section scripts
{
    @{Html.RegisterMvcPagerScriptResource();}
        <script type="text/javascript">
    function handleFailure(xhr, status, error) {
        alert('onfailure事件引发,返回的错误信息是:' + xhr.responseText + ',错误代码:' + xhr.status + ',状态代码:' + status + ',错误类型:' + error);
    }

    function handleSuccess(data, xhr, status) {
        alert('onsuccess事件引发,返回的数据如下:' + data + '\r\n返回的 http请求代码:' + xhr.status + ',状态代码:' + status);
    }
    </script>
}

_AjaxEvents.cshtml:

@model PagedList<article>
@Html.Partial("_ArticleTable", Model)
@Ajax.Pager(Model,new PagerOptions{PageIndexParameterName = "id",PagerItemTemplate = "{0}&nbsp;"},new MvcAjaxOptions{UpdateTargetId = "articles",OnBegin = "alert('onbegin事件引发')",OnSuccess = "handleSuccess",OnComplete = "function(xhr,status){alert('oncomplete事件引发,Http响应代码:'+xhr.status+',响应内容:'+xhr.statusText+',状态代码:'+status)}",OnFailure = "handleFailure"})

_ArticleTable.cshtml:

@model PagedList<Article>
<table class="table table-bordered table-striped">
    <tr>
        <th class="nowrap">序号</th>
        <th>
            @Html.DisplayNameFor(model => model.Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.PubDate)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Author)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Source)
        </th>
    </tr>
    @{ int i = 0;}
    @foreach (var item in Model)
    {
        <tr>
            <td>@(Model.StartItemIndex + i++)</td>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PubDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Author)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Source)
            </td>
        </tr>
    }
</table>

Model:

    public class Article
    {
        [Display(Name="文章编号")]
        public int ID { get; set; }
        [Display(Name="文章标题")]
        [MaxLength(200)]
        public string Title { get; set; }
        [Display(Name = "文章内容")]
        public string Content { get; set; }
        [Display(Name = "发布日期")]
        public DateTime PubDate { get; set; }
        [Display(Name = "作者")]
        [MaxLength(20)]
        public string Author { get; set; }
        [Display(Name = "文章来源")]
        [MaxLength(20)]
        public string Source { get; set; }
    }

Controller:

        
        public ActionResult AjaxEvents(int id = 1)
        {
            using (var db = new DataContext())
            {
                if (id == 2)
                {
                    Response.StatusCode = 500;
                    return Content("测试用的服务器端错误信息");
                }
                //throw new ApplicationException("测试用的服务器端错误信息");
                var model = db.Articles.OrderByDescending(a => a.PubDate).ToPagedList(id, 5);
                if (Request.IsAjaxRequest())
                    return PartialView("_AjaxEvents", model);
                return View(model);
            }
        }