Вопрос

У меня есть приложение ASP.NET 1.1, и я пытаюсь выяснить, почему, когда я меняю ComboBox, значение которого используется для заполнения другого (отношения родитель-потомок), создаются две обратные передачи.

Я проверил и проверил код, но не могу найти причину.

Вот оба стека вызовов, которые заканчиваются на page_load.

Первая обратная передача (генерируется автоматической обратной передачей ComboBox)

Стек вызовов обратной передачи http://www.juanformoso.com.ar/images/callstack1.jpg

Вторая обратная передача (это то, что я хочу выяснить, почему это происходит)

альтернативный текст http://www.juanformoso.com.ar/images/callstack2.jpg

Любое предложение?Что я могу проверить?

Это было полезно?

Решение

Это очень специфическая проблема с этим кодом, я сомневаюсь, что он будет полезен кому-то еще, но вот оно:

К комбо добавлена ​​проверка onchange с if, если условие было выполнено, был выполнен явный вызов функции обратной передачи.Если для комбинации было установлено значение AutoPostback, asp.net снова добавил вызов обратной передачи, создав две обратные передачи...

Сгенерированный HTML-код был таким:

[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"]

Другие советы

Первое, на что я хотел бы обратить внимание, это то, что у вас нет свойства AutoPostBack второго ComboBox, установленного в значение true.Если вы измените значение во второй комбинации, установив для этого свойства значение true, я считаю, что для этого элемента управления будет сгенерирована обратная передача.

Есть ли у вас код, которым вы могли бы поделиться?В свое время двойная обратная связь настолько беспокоила меня в классическом ASP, что именно она в конечном итоге побудила меня раз и навсегда переключиться на .NET.Всякий раз, когда у меня возникают подобные проблемы с .NET, я обращаюсь к каждому элементу CONTROL и каждому элементу PAGE, например load, init, prerender, click, SelectedIndexChanged и тому подобное, и ставлю точку останова.

Даже если у меня там нет кода, я вставлю что-то вроде:

Dim i As Integer
i = 0

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

Удачи.

Проверьте Request.Form["__EVENTTARGET"], чтобы найти элемент управления, инициирующий обратную передачу — это может помочь вам сузить область поиска.

Глядя на стеки вызовов и некоторое отражение (в ASP.NET 2 - у меня нет под рукой 1.1) - похоже, что SessionStateModule.PollLockedSessionCallback является частью процедур запуска HttpApplication.Возможно, ваше приложение перерабатывается — я почти уверен, что для этого событие записывается в журнал событий.

Единственное, что я могу предложить, это Fiddler или что-то в клиенте для захвата HTTP-трафика.

Это очень старый пост, но люди до сих пор ищут в нем решение точно так же, как и я на прошлой неделе.

Как сказал Гренгби, двойные события являются основными причинами, но удаление одного из них не всегда возможно.По крайней мере, в моем случае, и мне пришлось решать эту проблему по заявлению третьей стороны.

Я добавил следующий скрипт и изменил форму ASP на главной странице:

<script>var Q = 0;</script>
<form id="Form1" runat="server" onsubmit="Q++; if(Q==1){return true;} else { return false;}">

Кажется, это работает, пожалуйста, пересылайте свои комментарии.

Арун

http://www.velocityreviews.com/forums/t117900-asp-net-multiple-postback-issue.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top