使用Response.Write生成要下载的文件并更改页面上的元素

时间:2010-08-25 18:37:40

标签: c# .net asp.net response.write

我正在尝试更改asp:textbox的文本,并在我的页面上的某些ascx控件中折叠一些ajaxToolkit:CollapsiblePanelExtenders,以及输出动态生成的文件。我没有问题折叠CollapsiblePanelExtenders并从代码隐藏或输出文件更改文本框的文本。当我希望这些事件在同一个回发中发生时,问题就出现了。不幸的是,使用Response.Write否定了对页面的所有其他更改。

提前致谢

1 个答案:

答案 0 :(得分:3)

这是一个快速概念示例,说明如何通过带有UpdatePanel的AJAX回发同时更新屏幕上的文本并下载文件。

ASPX代码:

<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 example

我还想补充一点,UpdatePanels会吞噬你的灵魂,你应该摆脱它们,而不是像所谓的那样通过AJAX调用WebMethod:)