ASP.NET показывает ModalPopupExtender из кнопок, созданных в Code-Behind

Привет, у меня есть modalPopupExtender на моей веб-странице aspx, указывающей на панель, и в Code-Behind я создаю кнопки, которые я хочу, чтобы они отображали modalPopup, поэтому у меня есть:

buttonX.OnClientClick = "javascript:$get(" + modalPopup.ClientID + ").show();";

но вместо этого он просто выполняет PostBack, даже если я поставлю «return false»; в конце прошлого кода.


person sergioadh    schedule 18.03.2011    source источник
comment
Вы уверены, что добавление return false; не работает? Я только что открыл проект в Visual Studio и провел быстрый тест с окном предупреждения JavaScript, и return false; предотвращает обратную передачу.   -  person Infotekka    schedule 18.03.2011
comment
@Infotekka, возврат false сам по себе работал, но ошибкой был другой синтаксис, который так и не дошел до части возврата false   -  person sergioadh    schedule 18.03.2011


Ответы (3)


Я думаю, что кое-что понял, хотя я не уверен, что это лучшее решение.

Это мой код:

protected void Page_Load(object sender, EventArgs e)
    {
        Button btn = new Button();
        btn.Text = "Hello World!";
        btn.OnClientClick = "javascript:$get('" + HiddenField.ClientID + "').click(); return false;";
        PanelHello.Controls.Add(btn);
    }

и это моя страница ASPX:

<asp:HiddenField ID="HiddenField" runat="server" />
<asp:ModalPopupExtender ID="modalPopup" runat="server" TargetControlID="HiddenField"
    PopupControlID="Panel" DynamicServicePath="" Enabled="True" />
<asp:Panel ID="Panel" runat="server">
    <h1>
        Hello World!</h1>
</asp:Panel>

И это заставляет модальное всплывающее окно без обратной публикации =D!

person sergioadh    schedule 18.03.2011

Попробуй это

buttonX.OnClick = "javascript: preventDefault(); $get(" + modalPopup.ClientID + ").show();";
person Nirmal    schedule 18.03.2011
comment
Извините, но это не помогает, он по-прежнему просто игнорирует этот javascript. - person sergioadh; 18.03.2011
comment
Кроме того, это должен быть OnClientClick, OnClick не может быть выполнен, только Click, и это должен быть EventHandler. - person sergioadh; 18.03.2011

Кажется, я вижу твою проблему. Вы не цитируете ClientID в своем вызове JS, так что на самом деле он просто терпит неудачу - поэтому return false тоже не работает. Если единственной проблемой была обратная передача, вы все равно должны увидеть свое всплывающее окно до того, как страница отправит сообщение обратно самой себе.

Ваш код:

buttonX.OnClientClick = "javascript:$get(" + modalPopup.ClientID + ").show();";

Добавит "javascript:$get(ctl123).show();" (я использую ctl123 в качестве имени-заполнителя для любого вашего ClientID) - идея в том, что ошибка происходит, потому что у вас должно быть следующее:

buttonX.OnClientClick = "javascript:$get('" + modalPopup.ClientID + "').show();";

Что выведет "javascript:$get('ctl123').show();"

Разница в том, что во втором идентификатор элемента управления указан в кавычках.

Попробуйте и добавьте return false;, чтобы предотвратить обратную передачу. Вот так:

buttonX.OnClientClick = "javascript:$get('" + modalPopup.ClientID + "').show(); return false;";
person Infotekka    schedule 18.03.2011
comment
у меня protected void Page_Load(object sender, EventArgs e) { Button btn = new Button(); btn.Text = "Hello World!"; btn.OnClientClick = "javascript:$get('" + modalPopup.ClientID + "').show();return false;"; PanelHello.Controls.Add(btn); } - person sergioadh; 18.03.2011
comment
и <h2> Hello World!</h2> <br /> <asp:Panel ID="PanelHello" runat="server"> </asp:Panel> <asp:HiddenField ID="HiddenField" runat="server" /> <asp:ModalPopupExtender ID="modalPopup" runat="server" TargetControlID="HiddenField" PopupControlID="Panel" DynamicServicePath="" Enabled="True" /> <asp:Panel ID="Panel" runat="server"> <h1> HOLA!</h1> </asp:Panel> И все еще не работает. - person sergioadh; 18.03.2011
comment
Вы хотите узнать, выдает ли ваша страница какие-либо ошибки JavaScript? - person Infotekka; 18.03.2011