我有一个非常复杂的Asp.NET 4.0应用程序,其中包含使用Telerik RadControls构建的特定表单。
有一个带嵌套RadGrid的RadGrid,行由各种TextBox(RadTextBox等等)组成。
这个表格很大,当它增长时,如果我发布页面(异步或非异步),我在 Application_BeginRequest 中出现错误,堆栈是:
in System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
in System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding)
in System.Web.HttpRequest.FillInFormCollection()
我知道在网络表单中可以提供1000个项目的限制,我知道这个限制可以通过web.config进行配置。
我不需要发布这些控件:我使用它们来启用Telerik控件的客户端功能,所以我想知道:有一种方法可以从HttpValueCollection中专门删除一个控件或一组控件。为了减少物品数量?
非常感谢!
更新:正如@Alex建议我实现了一个功能来禁用网格中的所有输入:
function disableAllGridsControls() {
$("input[id*=gridServiziCommessa]").attr("disabled", "disabled");
}
这解决了标准回发的问题,但没有使用ajax更新。 Grid被称为RadAjaxManager的Telerik控件激活,扩展了标准的ASP.NET Ajax。 此控件公开BeginRequest event,所以我试图在此事件期间调用disableAllGridsControls:
function ajaxManager_beginRequest(sender, args) {
disableAllGridsControls();
}
但根本不起作用......用小提琴手看,我仍然看到在AJAX通话期间发布的所有输入....
还有另一种奇怪的行为:如果我禁用网格服务器端(Enabled =“False”)并进行AJAX调用,则无论如何都会发布输入。
我缺少什么?
UPDATE2 好的,我很确定问题出在MicrosoftAjax框架或RadAjaxManager中,它基于它。似乎为了执行ajax请求而构建的参数集合忽略了输入被禁用的事实......很奇怪......
答案 0 :(得分:1)
您可以disable您的控件然后they won't be successful(禁用的控件无法成功),因此不会被提交。
可以在客户端和服务器端完成。
在服务器端将父控件的Enabled
属性设置为true
- 这将禁用其中的所有文本框,下拉列表等。
在客户端,它可以完成,例如通过在表单提交期间禁用必要的控件。
这是一个非常简单的示例,说明如何使用jQuery在客户端完成:
$('#theForm').submit(function () {
$(this).find('[name^="<%= yourGrid.UniqueID %>"]')
.attr('disabled', 'disabled');
return true;
});
这里我禁用name
属性以yourGrid
开头的所有控件(假设,这是一个命名容器)值。
尽管如此,我认为通过web.config
更改发布值的最大数量是最佳选择。