【发布时间】:2012-03-05 00:26:27
【问题描述】:
我有一个非常复杂的 Asp.NET 4.0 应用程序,具有使用 Telerik RadControls 构建的特定表单。
有一个带有嵌套 RadGrid 的 RadGrid,其行由各种文本框(RadTextBox 等...)组成。
这个表单很大,当它增长时,如果我发布页面(异步与否),我会在 Application_BeginRequest 中收到错误,堆栈是:
in System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
in System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding)
in System.Web.HttpRequest.FillInFormCollection()
我知道 Web 表单中可发布的项目限制为 1000 个,并且我知道此限制可通过 web.config 进行配置。
我不需要发布这些控件:我使用它们来启用 Telerik 控件的客户端功能,所以我想知道:有一种方法可以专门从 HttpValueCollection 中删除一个控件或一组控件为了减少项目的数量?
非常感谢!
更新:正如@Alex 建议的那样,我已经实现了一个函数来禁用网格内的所有输入:
function disableAllGridsControls() {
$("input[id*=gridServiziCommessa]").attr("disabled", "disabled");
}
这解决了标准回发的问题,但不是 ajax 更新。 Grid 由一个名为 RadAjaxManager 的 Telerik 控件进行 ajaxified,该控件扩展了标准的 ASP.NET Ajax。 这个控件暴露了一个BeginRequest event,所以我试图在这个事件期间调用disableAllGridsControls:
function ajaxManager_beginRequest(sender, args) {
disableAllGridsControls();
}
但根本不起作用...看着提琴手,我仍然看到在 AJAX 调用期间发布的所有输入...
还有另一个奇怪的行为:如果我禁用网格服务器端 (Enabled="False") 并进行 AJAX 调用,输入仍然会发布。
我错过了什么?
UPDATE2 好的,我很确定问题出在 MicrosoftAjax 框架或基于它的 RadAjaxManager 中。似乎为执行 ajax 请求而构建的参数集合忽略了输入被禁用的事实......很奇怪......
【问题讨论】:
标签: asp.net http webforms asp.net-ajax telerik