PopupExtender放在用户控件中时的回发问题

时间:2011-03-17 15:45:36

标签: asp.net

我正在Web用户控件中创建一个ModalPopupExtender。 当我单击面板中的OK按钮(显示为模型弹出窗口)时,按钮的事件Handeler不会执行。 当我不使用Web用户控件时,不会发生此问题。 这是用户控件(.ascx)文件代码。

<script type="text/javascript" language="javascript">
    function OkClicked(sender, e) {
            __doPostBack('Button1', e);
        }
</script>

<asp:Button ID="Button2" runat="server" Text="Show" />
<asp:Panel ID="Panel1" runat="server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</asp:Panel>
<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" 
    DropShadow="True" OkControlID="Button1" PopupControlID="Panel1" 
    TargetControlID="Button2" onokscript="OkClicked()">
</asp:ModalPopupExtender>        
<p>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</p>

“Button1”的点击事件的事件Handeler是

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = TextBox1.Text;
}

2 个答案:

答案 0 :(得分:0)

在javascript中,您不应将“Button1”作为控件的名称。相反,在您的控件的PreRender事件上,使用this.Button1.ClientID填充它。

ClientID是按钮控件的整个生成页面上的唯一标识符,允许服务器精确查明触发回发的控件。

如果不是这样,您将无法在一个页面上放置同一控件的多个实例。

在代码中:

<script type="text/javascript" language="javascript">
function OkClicked(sender, e) {
        __doPostBack('<%= this.Button1.ClientID %>', e);
    }

答案 1 :(得分:0)

一些建议:

  1. 您是否在此页面上进行过任何验证?如果是这样,那么当您单击“确定”按钮时,该验证可能会失败。当您单击该按钮时,ModalPopup Extender可能会关闭,如果验证失败,它可能会取消发生的事件。如果是这种情况,请添加一个属性:CausesValidation =“false”

  2. 如果这不起作用,你可以添加一个属性来回发它,我相信有一个属性 - &gt;的AutoPostBack = “真”。

  3. @Joachim是正确的,你需要使用clientID,但与此同时,我认为你不需要调用javascript来运行后端代码。

    此外,您可以考虑将其放入UpdatePanel,这样您就可以在回发页面时进行AJAX回发,而无需来回传送整个页面。