1

我有一个 MVC PagedList 工作得很好。我正在过滤该列表,并且过滤谓词在往返期间发送到客户端。我使用不显眼的 ajax 替换。我的寻呼机代码如下所示:

@Html.PagedListPager((IPagedList)Model.Items,
        page => Url.Action("Filter", 
                new ClientSearch 
                { 
                    Page = page, 
                    PageSize = Model.PageSize, 
                    Predicate = Model.Predicate 
                }),
        PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(
                new AjaxOptions 
                {
                    HttpMethod = "POST", 
                    UpdateTargetId = "clients-list",
                }))

问题是 Predicate 参数太长。它应该是。我得到以下异常:

“请求过滤模块被配置为拒绝查询字符串过长的请求。”

我不想更改 web.config 以允许长参数。我想在 POST 标头而不是查询字符串参数中传递模型。PagedList可以吗?

提前致谢。

4

1 回答 1

0

我仍然无法弄清楚 PagedList 是否支持发布大数据,但是我最终得到了以下解决方法。

我有一个 post 方法,它将模型发布到控制器函数并用结果替换部分视图内容。

function postToPage(url, size, predicate, replace) {
    var data = {
        size: size,
        predicate: predicate
    };
    $.ajax({
        url: url,
        data: data,
        type: 'POST',
        success: function (result) {
            $('#' + replace).html(result);
        }
    });
}

我还有另一个函数来替换分页容器 div 中的 URL,并连接 click 事件以调用 post 方法。click 事件停止事件传播,因此不会使用 href 属性中的 URL。

function replaceHrefs() {
    $('div[class = pagination-container').find('a').each(function (index, value) {
        var url = value.href.toString();
        value.addEventListener('click', function (event) {
            event.stopPropagation();
            post(url);
        });
        value.href = '#';
    });

我创建了一个自定义版本的 post 方法,以便从模型中生成页面大小和谓词。

function post(url) {
    postToPage(url, @Model.PageSize, '@Model.Predicate', 'clients-list');
}

我必须将 URL 替换过程连接到两个地方:文档准备就绪时和 ajax 调用完成时。这些涵盖了我需要的所有案例。

$( document ).ajaxComplete(function() {
    replaceHrefs();
});

$( document ).ready(function() {
    replaceHrefs();
});

我希望它可以帮助某人。

于 2014-04-13T07:51:40.793 回答