我正在尝试更改 asp:textbox 的文本并在我的页面上的一些 ascx 控件中折叠一些 ajaxToolkit:CollapsiblePanelExtenders 以及输出动态生成的文件。折叠 CollapsiblePanelExtenders 并从代码隐藏更改文本框的文本或输出文件我没有问题。当我希望这两个事件在同一个回发时发生时,就会出现问题。不幸的是,使用 Response.Write 否定了对页面的所有其他更改。
提前致谢
我正在尝试更改 asp:textbox 的文本并在我的页面上的一些 ascx 控件中折叠一些 ajaxToolkit:CollapsiblePanelExtenders 以及输出动态生成的文件。折叠 CollapsiblePanelExtenders 并从代码隐藏更改文本框的文本或输出文件我没有问题。当我希望这两个事件在同一个回发时发生时,就会出现问题。不幸的是,使用 Response.Write 否定了对页面的所有其他更改。
提前致谢
这是一个快速概念示例,说明如何通过带有 UpdatePanel 的 AJAX 回发同时更新屏幕上的文本并下载文件。
ASP 代码:
<asp:UpdatePanel id="update1" runat="server">
<ContentTemplate>
<asp:TextBox id="textbox1" runat="server" /><br />
<asp:Button id="button1" onclick="button1_Click" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
C#代码:
private string GenerateDownloadLink(string fileContent, string fileName) {
// worker process will need write access to this folder
string downloadFolder = "./download";
TextWriter file = new StreamWriter(Server.MapPath(downloadFolder) + @"\" + fileName);
file.WriteLine(fileContent);
file.Close();
return downloadFolder + "/" + fileName;
}
private void button1_Click(object sender, EventArgs e) {
textbox1.Text = "the file download will begin shortly...";
string fileContent = "here is the content for a new dynamically generated file";
string fileUrl = GenerateDownloadLink(fileContent, "hello.txt");
ScriptManager.RegisterStartupScript(this, this.GetType(), "StartDownload", "window.location = '" + fileUrl + "';", true);
}
另请查看此MSDN 示例。
我还想补充一点,UpdatePanels 会吞噬你的灵魂,如果可能的话,你应该摆脱它们,转而使用诸如通过 AJAX 调用 WebMethod 之类的东西:)