2

是否可以从 @Html.PagedListPager(在这里 ) 中调用 JavaScript 函数?

我有一个按钮,它调用以下函数并轻松执行所有它应该做的事情:

function fetchResults() {
    $.get('@Url.Action("Search", "Notifications")',
        {
            device: "Device"
        },
        function (data) {
            $('#results').html(data);
        })
};

现在,当我单击 PagedListPager 上的页码时,我该如何做同样的事情?

目前我的寻呼机重新加载页面,这是我要避免的主要事情。

这是我的寻呼机:

@Html.PagedListPager((IPagedList)ViewBag.NotificationsPage, page => 
    Url.Action("Search", "Notifications", new
    {
        device = "Device",
        page = page
    }),
    PagedListRenderOptions.PageNumbersOnly)

也许有更好的方法来做到这一点。帮助将不胜感激。

4

1 回答 1

5

这个@Html.PagedListPager助手所做的只是吐出一些包含链接的 HTML 来执行分页。所以你可以订阅这些链接的点击事件并对它们进行 AJAXify:

$(document).on('click', 'a', function() {
    $.ajax({
        url: this.href,
        type: 'GET',
        cache: false,
        success: function(result) {
            $('#results').html(result);
        }
    });
    return false;
});

需要注意的重要事项:

  • 我已经以活泼的方式订阅了点击事件。这意味着如果我们替换 AJAX 请求成功回调中的链接,这个点击事件处理程序将继续工作
  • 您可能想要调整$(document).on('click', 'a', function() {非常具有包容性的选择器,并仅针对此寻呼机生成的链接。例如,看看它们是否不在某些包含 div 或其他内容的内部,在这种情况下,您可以使用类似$('.pager').on('click', 'a', function() {.
  • success回调中,您可能需要调整$('#results')选择器以定位包含实际结果的 div,该结果将使用控制器操作返回的部分 HTML 进行刷新。
  • 谈到部分 HTML 和控制器操作,您显然需要调整在 AJAX 请求中调用的控制器操作以返回 PartialView 而不是仅包含更新记录和新分页链接的完整视图。
于 2014-02-06T15:10:11.230 回答