Явный __doPostBack () - PullRequest
       22

Явный __doPostBack ()

1 голос
/ 19 сентября 2010

Я явно добавил __doPostBack () для события Button onclientClick.

<asp:Button ID="Button1" runat="server" Text="Button" 
         OnClientClick="__doPostBack('Button1','')"/> 

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

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','')");

Опять же, если я добавляю с возвратом false, это дает мне вызов только после загрузки страницы при нажатии

 <asp:Button ID="Button1" runat="server" Text="Button" 
         OnClientClick="__doPostBack('Button1','');return false;"/>

и возвращаемое значение true снова дают мне двойную загрузку страницы, но добавление возвращаемого значения true или false в коде attribute.add дает тот же результат, только один вызов загрузки страницы.* Я не могу понять, что именно происходит, когда я пытался добавить __doPostBack другим способом.Пожалуйста помоги.Спасибо

Ответы [ 4 ]

4 голосов
/ 20 сентября 2010

Помещая OnClientClick, затем asp.net отображает функцию onlick по размеру клиента с вашим кодом и doPostBack.

Таким образом, он вызывается 2 раза, потому что один вызывается самостоятельно, а другой - потому чтодобавлено.

1 голос
/ 08 декабря 2011

Ответы Aristos и user449689 верны: у вас двойная обратная передача, потому что кнопка ASP.NET всегда выполняет обратную передачу (поэтому OnClientClick бесполезен, так как вызывает другую обратную передачу ранее).

Когда вы возвращаете true(или ничего не возвращать) из OnClientClick, вы не предотвращаете событие JavaScript onClick кнопки (т. е. кнопка по-прежнему нажимается и запускает _doPostBack с последующей обычной обратной передачей).Если вы вернете false, событие onClick отменяется (то есть кнопка на самом деле не нажата, поэтому запускается только _doPostBack).Это поведение JavaScript.

Атрибут OnClientClick отображается как «onClick» в коде HTML (когда этот атрибут находится на кнопке ASP.NET).Ваше утверждение ...

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','');return true;");

... не является допустимым HTML, так как он отображает "onClientClick", который не является событием JavaScript (т. Е. _DoPostBack никогда не запускается, а обычная обратная передача есть).Свойство атрибутов используется для добавления прямых атрибутов HTML (без перезаписи из .NET) к окончательному отображению кнопки.

Мой совет: не вызывайте _doPostBack, если вы не нашли никакой другой альтернативы для запуска сообщенияназад.В предоставленном вами примере атрибут OnClientClick полностью избыточен.

Надеюсь, я достаточно ясно (мой английский не очень хороший).

1 голос
/ 20 сентября 2010

Кнопка уже выполняет PostBack, так зачем вам вызывать ее со стороны клиента?

В любом случае, page_load в вашем случае вызывается дважды, я думаю, потому что один раз выполняется OnClientClick, второй раз на стороне сервера.

0 голосов
/ 20 сентября 2010

Вы можете попробовать просмотреть отрендеренный вывод (то есть получить доступ к своей странице ASPX в браузере и просмотреть исходный код страницы) и посмотреть, как выглядит полученный HTML / Javascript. Возможно, __doPostBack вызывается дважды.

...