一个Button
一个ModalPopupExtender
一个Panel问题是这样的:在做修改时候 当点修改Button Panel 显示了也有阴影效果;
但是我修改Button有btn_Update_Click事件,这事件是绑定数据的;
现在的效果是 点了修改Button按扭它不是先执行btn_Update_Click事件
而是直接的显示Panel 
有没有办法先让它执行绑定了再显示Panel ???

解决方案 »

  1.   

    Button是ModalPopupExtender的TargetControlID吗?
      

  2.   

    其实关键也就是这个了。
    不过PostBack后最好是在客户端asp.net ajax全部下载完后自动执行的pageLoad()方法里执行这个。贴段代码,参考一下。
    <head runat="server">
        <title></title>
        <style type="text/css">
            .popupPanel { border: solid 1px Black; padding: 20px; }
        </style>
        <script type="text/javascript">
            var showPanel = false;
            function setState() {
                showPanel = true;
            }
            function pageLoad() {
                if (showPanel == true)
                    $find('mpe').show();
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </cc1:ToolkitScriptManager>
        <div>
            <%--ButtonPopup: 手动弹出Popup--%>
            <asp:Button ID="ButtonPopup" runat="server" Text="手动弹出" />
            <%--Button1: 先执行服务器端事件,然后再弹出Popup--%>
            <asp:Button ID="Button1" runat="server" Text="执行完服务器端事件后再弹出" 
                onclick="Button1_Click" />
            <asp:Panel ID="Panel1" runat="server" CssClass="popupPanel" Style="display: none;">
                <asp:GridView ID="GridView1" runat="server">
                </asp:GridView> 
                <asp:Button ID="ButtonOK" runat="server" Text="确定" />
                <asp:Button ID="ButtonCancel" runat="server" Text="取消" />
            </asp:Panel>
            <cc1:ModalPopupExtender ID="mpe" runat="server" TargetControlID="ButtonPopup" PopupControlID="Panel1" OkControlID="ButtonOK" CancelControlID="ButtonCancel">
            </cc1:ModalPopupExtender>
        </div>
        </form>
    </body>protected void Button1_Click(object sender, EventArgs e)
    {
            DataTable dt = new DataTable();
            
            DataColumn dc = new DataColumn("name", typeof(string));
            dt.Columns.Add(dc);
            dc = new DataColumn("age", typeof(int));
            dt.Columns.Add(dc);
            dc = new DataColumn("uid", typeof(int));
            dc.AutoIncrement = true;
            dc.AutoIncrementStep = 1;
            dc.AutoIncrementSeed = 1;
            dt.Columns.Add(dc);        for (int i = 0; i < 10; i++)
            {
                DataRow dr = dt.NewRow();
                dr["name"] = "name" + i;
                dr["age"] = 12 + i;
                dt.Rows.Add(dr);
            }        GridView1.DataSource = dt;
            GridView1.DataBind();        ScriptManager.RegisterStartupScript(this, this.GetType(), "key", "setState();", true);}
      

  3.   

    楼上的 不行呀!~ 
    function pageLoad() 
           {
            if (showPanel == true)
            $find('mpe').show();
            }
    这里不都没调用到吗?
      

  4.   

    不可能调用不到。你在页面上放了<asp:ScriptManager />了吗?只要你放,它就调!
      

  5.   

    我代码上写的是ToolScriptManager,你改成ScriptManager吧。
      

  6.   

    <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:Button ID="ButtonPopup" runat="server" Text="手动弹出" />     
            <div>   
            <asp:Button ID="Button3" runat="server" Text="执行完服务器端事件后再弹出" OnClick="Button3_Click" />        
            <asp:Panel ID="Panel1" runat="server" CssClass="popupPanel" >
                <asp:GridView ID="GridView1" runat="server">
                </asp:GridView> 
                <asp:Button ID="ButtonOK" runat="server" Text="确定" />
                <asp:Button ID="ButtonCancel" runat="server" Text="取消" />
            </asp:Panel>
             <cc1:ModalPopupExtender ID="mpe" runat="server" TargetControlID="Button3" PopupControlID="Panel1" OkControlID="ButtonOK" CancelControlID="ButtonCancel">
            </cc1:ModalPopupExtender> 还是不先执行 Button3_Click .....