<asp:UpdatePanel ID="updatePanel" runat="server">
<ContentTemplate>
<table>......Lots of data......</table>
<asp:Timer ID="timerAutoRefresh" runat="server" OnTick="timerAutoRefresh_Tick">
</asp:Timer>
</ContentTemplate>
<Triggers><asp:AsyncPostBackTrigger ControlID="btnExport" EventName="click"></asp:AsyncPostBackTrigger>
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnExport" runat="server" Width="62px" Text="Export" CssClass="cssButton"
OnClick="btnExport_Click" />
public override void VerifyRenderingInServerForm(Control control)
{//Verifies that the control is rendered
}
protected void btnExport_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
updatePanel.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
我必须将更新面板中的任何数据导出到Excel工作表中。我有一个 我的MasterPage中的Ajax Scriptmanager。
当我点击导出按钮时,它会给我这个错误:
Error: Sys.WebForms.PageRequestManagerServerErrorException: Script control 'timerAutoRefresh' is not a registered script control. Script controls must be registered using RegisterScriptControl() before calling RegisterScriptDescriptors().
Parameter name: scriptControl
如何将更新面板中的数据导出到Excel工作表?
答案 0 :(得分:1)
这对我有用:
网页强>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="ScriptManager1">
</asp:ScriptManager>
<asp:UpdatePanel runat="server" ID="UpdatePanel1">
<ContentTemplate>
<asp:Table ID="Table1" runat="server">
<asp:TableRow runat="server">
<asp:TableCell runat="server">Test</asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:Label runat="server" Text="Page not refreshed yet." ID="Label1">
</asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="tick"></asp:AsyncPostBackTrigger>
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnExport" runat="server" Width="62px" Text="Export" OnClick="btnExport_Click" />
<asp:Timer runat="server" ID="Timer1" Interval="10000" OnTick="Timer1_Tick">
</asp:Timer>
<asp:Label runat="server" Text="Label" ID="Label2"></asp:Label>
代码背后
protected void Timer1_Tick(object sender, EventArgs e)
{
Label1.Text = "Panel refreshed at: " +
DateTime.Now.ToLongTimeString();
}
public override void VerifyRenderingInServerForm(Control control)
{
/* Verifies that the control is rendered */
}
protected void btnExport_Click(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment;filename=MyFiles.xls");
Response.Charset = "";
this.EnableViewState = false;
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
UpdatePanel1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
我需要做的是将计时器控件移到UpdatePanel之外并关联AsyncPostBackTrigger。我还需要删除按钮单击的AsyncPostBackTrigger(希望你不需要这个)。