0

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

提前致谢

4

1 回答 1

3

这是一个快速概念示例,说明如何通过带有 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 之类的东西:)

于 2010-08-25T19:59:11.710 回答