在使用UpdatePanel的时候,如果要用到
Response
.
Write
()方法,则会出错,错误信息内容大概如下:
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed . Common causes for this error are when the response is modified by calls to Response . Write (), response filters, HttpModules, or server trace is enabled. Details: Error parsing near ' 你要输出的内容|UpdatePanel|U'
解决方法如下:
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
这样,问题就解决了。
下面是我的一个项目中的代码:
母版页前台代码:
子页面后台代码:
这样,当按钮btnExport的单击事件中用到: Response . Write ()方法时,就不会出现题目中的错误了。
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed . Common causes for this error are when the response is modified by calls to Response . Write (), response filters, HttpModules, or server trace is enabled. Details: Error parsing near ' 你要输出的内容|UpdatePanel|U'
解决方法如下:
1.如果调用Response.Write()方法的服务器控件在使用UpdatePanel的页面,则只需要在UpdatePanel下增加一个<Triggers>节点,通过PostBackTrigger注册一下改控件就可以了。代码如下:
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- </asp:ScriptManager>
- <asp:UpdatePanel ID="UpdatePanel1" runat="server">
- <Triggers>
- <asp:PostBackTrigger ControlID="Button2" /> <!--Button2就是下面那个需要在Button2_Click事件里使用Response.Write()的按钮ID-->
- </Triggers>
- <ContentTemplate>
- <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
- <asp:UpdateProgress ID="UpdateProgress1" runat="server">
- <ProgressTemplate></ProgressTemplate>
- </asp:UpdateProgress>
- </ContentTemplate>
- </asp: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)
- {
- ((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);
- }
这样,当按钮btnExport的单击事件中用到: Response . Write ()方法时,就不会出现题目中的错误了。