ASP.NET在Code-Behind中创建的Buttons中显示ModalPopupExtender

时间:2011-03-18 03:18:37

标签: javascript asp.net ajax modalpopupextender code-behind

您好,我的aspx网页中有一个指向Panel的modalPopupExtender,在Code-Behind中我创建了按钮,我希望它们显示modalPopup,所以我有:

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

但它只是做一个PostBack,即使我把“return false”。在过去的代码结束时。

3 个答案:

答案 0 :(得分:1)

我想我已经找到了一些东西,虽然我不确定它是最好的解决方案。

这是我的代码隐藏:

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!

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

我想我看到了你的问题。你没有在JS调用中引用ClientID,所以它实际上只是失败 - 这就是为什么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();"

不同之处在于,在第二个中引用了控件ID。

尝试一下,添加return false;以防止回发。像这样:

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