在使用UpdatePanel的时候,如果要用到Response.Write()方法,则会出错,错误信息内容大概如下:
解决方法如下:
1.如果调用Response.Write()方法的服务器控件在使用UpdatePanel的页面,则只需要在UpdatePanel下增加一个<Triggers>节点,通过PostBackTrigger注册一下改控件就可以了。代码如下: <asp:ScriptManager ID="ScriptManager1" runat="server"> 2.但是,如果是在母版页中使用UpdatePanel,则不能通过以上方法来解决,否则或出现类似以下错误: A control with ID 'btnExport' could not be found for the trigger in UpdatePanel 'UpdatePanel1'. 这主要是UpdatePanel1找不到<asp:PostBackTrigger ControlID="btnExport" />中注册的控件,因为,我们一般没有在母版页中添加这个控件(btnExport)。(当然,如果在UpdatePanel的<ContentTemplate> 节点下添加了ID为btnExport的控件,则不会出错。) 如果出现这样的错误该怎么办呢,我的解决方法是在需要用到Response.Write()方法的控件所在页码的Page_Load事件中添加如下代码: ((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport); //ScriptManager1是<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager>的ID 这样,问题就解决了。 下面是我的一个项目中的代码: 母版页前台代码: <asp:ScriptManager runat="server" ID="ScriptManager1"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> <asp:UpdateProgress ID="UpdateProgress1" runat="server"> <ProgressTemplate> <table class="progressBox" style="width: 200px"> <tr> <td> <asp:Image runat="server" ID="imgLoad" ImageUrl="~/App_Themes/SkinFile/Images/animated_loading.gif" /> </td> <td> 正在从服务器下载数据... </td> </tr> </table> </ProgressTemplate> </asp:UpdateProgress> </ContentTemplate> <asp:UpdatePanel> 子页面后台代码: protected void Page_Load(object sender, EventArgs e) 这样,当按钮btnExport的单击事件中用到:Response.Write()方法时,就不会出现题目中的错误了。 |
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。