Asp.NET WebForm如何从提交中删除控件

时间:2012-02-13 15:39:05

标签: asp.net http webforms asp.net-ajax telerik

我有一个非常复杂的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请求而构建的参数集合忽略了输入被禁用的事实......很奇怪......

1 个答案:

答案 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更改发布值的最大数量是最佳选择。