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