Asp.NET WebForm Как удалить элемент управления из отправки - PullRequest
0 голосов
/ 13 февраля 2012

У меня очень сложное приложение 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()

Я знаю, что в веб-форме есть ограничение в 1000 элементов, и я знаю, что этот предел можно настроить через web.config.

Мне НЕ нужно публиковать эти элементы управления: я использовалих, чтобы включить клиентские функции элементов управления Telerik, поэтому мне интересно: есть способ специально удалить элемент управления или набор элементов управления из коллекции HttpValueCollection, чтобы уменьшить количество элементов?

Многиеспасибо!

ОБНОВЛЕНИЕ : Как подсказывает @Alex, я реализовал функцию отключения всех входов внутри моей сетки:

function disableAllGridsControls() {
    $("input[id*=gridServiziCommessa]").attr("disabled", "disabled");
}

, это решает проблему сстандартный постбакк, НО не с обновлением ajax.Сетка Ajaxified с помощью элемента управления Telerik под названием RadAjaxManager, который расширяет стандарт ASP.NET Ajax.Этот элемент управления выставляет событие BeginRequest , поэтому я пытаюсь вызвать disableAllGridsControls во время этого события:

function ajaxManager_beginRequest(sender, args) {
    disableAllGridsControls();
}

, но просто не работает ... глядя на фиддлер Я все еще вижуВСЕ ВХОДЫ, опубликованные во время вызова AJAX ....

И есть еще одно странное поведение: если я отключу сетку на стороне сервера (Enabled = "False") и сделаю вызов AJAX, входные данные будут опубликованы в любом случае.

Что мне не хватает?

UPDATE2 Хорошо, я уверен, что проблема заключается в платформе MicrosoftAjax или в RadAjaxManager, который основан на ней.,Кажется, что коллекция параметров, созданная для выполнения ajax-запроса, игнорирует тот факт, что входы отключены ... странно ...

1 Ответ

1 голос
/ 14 февраля 2012

Вы можете отключить свои элементы управления, затем они не будут успешными (отключенные элементы управления не могут быть успешными) и, следовательно, не будут отправлены.

Это может быть сделано как на стороне клиента, так и на стороне сервера.

  • На стороне сервера установите свойство Enabled родительского элемента управления на true - это отключит все текстовые поля, выпадающие списки и т. Д. Внутри него.,

  • На стороне клиента это можно сделать, например, отключив необходимые элементы управления во время отправки формы.

Вот очень простой примеркак это можно сделать на стороне клиента с помощью jQuery:

$('#theForm').submit(function () {
    $(this).find('[name^="<%= yourGrid.UniqueID %>"]')
        .attr('disabled', 'disabled');

    return true;
});

Здесь я отключаю все элементы управления, атрибут которых name начинается со значения yourGrid (при условии, что это контейнер именования).

Несмотря на это, я полагаю, что изменение максимального количества значений публикации с помощью web.config является наилучшим вариантом.

...