Обратная передача без контекста управления - PullRequest
0 голосов
/ 27 ноября 2010

У меня есть ситуация, когда я хочу использовать несколько элементов управления на стороне сервера, которые имеют состояние на стороне клиента. Я хочу проверить состояние, когда происходят события (например, различные щелчки), и когда состояние находится там, где я хочу, я хочу отправить обратно на сервер и выполнить некоторую обработку.

В частности, мне нужно убедиться, что по крайней мере 3 различных элемента управления имеют выбор, прежде чем я хочу сделать обратную передачу. Поскольку нет конкретного элемента управления, который будет инициировать обратную передачу, я просто хочу захватить события выбора на стороне клиента, а затем вызвать __doPostBack () (или что-то подобное), чтобы инициировать обработку. Поэтому я отключил все события на стороне сервера, отключил автостопбэк и подключил некоторый javascript для обработки этого.

У меня есть весь код на стороне клиента, написанный и работающий, однако я не могу заставить сервер распознать обратную передачу. Я переопределяю RaisePostBackEvent и проверяю eventArgument для своего пользовательского аргумента. Это не работает, так как RaisePostBackEvent никогда не вызывается.

Этот метод работал, когда у меня была включена автостопбэк (например, событие на стороне сервера Telerik Radgrid OnSelectChanged).

Есть предложения о том, как лучше всего с этим справиться?

Обновление:

Когда запрашивается пример кода, он точно такой же, как я сказал выше. Не ракетостроение.

Javascript:

function CheckState(source, eventArgs) {
    // logic to test state of controls
    __doPostBack("", "DoMyWork:");
}

Тогда в коде позади:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    if (eventArgument.IndexOf("DoMyWork") != -1)
    {
        // do my server side work.
    }
}

Решение:

Потому что это несколько сбивает с толку .. Я просто скажу, каким было мое решение.

Я использовал один из элементов управления, участвующих в обратной передаче, и использовал его UniqueID для параметра элемента управления, затем мой метод в качестве события.

1 Ответ

5 голосов
/ 27 ноября 2010

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

__doPostBack('textbox1','')  //no arguments

__doPostBack('textbox1','12')

вы можете прочитать аргумент, который вы передали из кода, например:

Dim arg As String = Request("__EVENTARGUMENT") 
...