ASP.NET - атрибут onclick, добавленный в кнопку, означает, что страница не может определить источник обратной передачи - PullRequest
3 голосов
/ 25 января 2011

Я только что добавил немного JavaScript к нажатию кнопки в ASP.NET, чтобы отключить кнопку (чтобы пользователь не мог отправить форму дважды).

Когда я нажимаю эту кнопку,страница отправляется обратно нормально, но обработчик событий управления не запускается - кажется, ASP.NET не может определить, какой элемент управления отправил страницу назад.

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

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Если вы отключите кнопку до ее отправки назад, событие на стороне сервера не будет зарегистрировано.

Самый простой способ сделать это - скрыть кнопку после щелчка или создать обработчик, который удерживает второй щелчок от каскадирования до сообщения формы.

В прошлый раз у меня была эта проблема, когда .style.display = "none" в onclientclick сделали то, что мне нужно Disabled - это не просто стиль, это состояние, которое уважает сервер.

<asp:Button ID="Button1" OnClientClick="javascript:this.style.display = 'none'" 
 onclick="Button1_Click" runat="server" Text="Button" />
2 голосов
/ 26 января 2011

Попробуйте:

<asp:Button ID="Button1" UseSubmitBehavior="false" 
     OnClientClick="javascript:document.getElementById('Button1').disabled = true;    __doPostBack('__Page', '');" 
     onclick="Button1_Click" runat="server" Text="Button" />

Он пройдет без дополнительной проверки запроса.

После того, как вы прокомментируете, как вы добавляете onclick: просто добавьте _ doPostBack(' _Page', 'YOURBUTTONNAME') и проверьте аргументы событий на стороне сервера.

...