2010-09-19 4 views
1

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

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

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

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

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

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

и возвращает истину дает мне снова дважды загрузки страницы, но добавление возврата истинным или ложным в коде attribute.add дает тот же результат, только один вызов загрузки страницы.

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

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

ответ

1

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

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

0

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

4

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

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

1

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

Когда вы возвращаете 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 никогда не срабатывает, но обычно постбэк). Свойство Attributes используется для добавления прямых HTML-атрибутов (без перезаписи с .NET) до окончательной рендеринга кнопки.

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

Надеюсь, я был достаточно ясен (мой английский невелик).

Смежные вопросы