我有一个 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吗?
提前致谢。
我仍然无法弄清楚 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 方法。点击事件会停止事件传播,因此 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();
});
我希望它对某人有帮助。
@Html.PagedListPager(
Model,
page => Url.Action("Index", new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }),
new PagedListRenderOptions
{
Display = PagedListDisplayMode.IfNeeded,
MaximumPageNumbersToDisplay = 2,
UlElementClasses = new[] { "pagination", "justify-content-center" },
LiElementClasses = new[] { "page-item", "m-1" },
FunctionToTransformEachPageLink = (liTag, aTag) =>
{
aTag.AddCssClass("page-link");
return aTag;
}
}
)