1

当代码放置 onClick 事件时,它不显示打开保存对话框,也没有抛出异常,但是 onLoad 事件可以正常工作,打开一个打开保存对话框来保存一个 word 文件。

string strDocBody;
strDocBody = "<html " + "xmlns:o='urn:schemas-microsoft-com:office:office' " + "xmlns:w='urn:schemas-microsoft-com:office:word'" + "xmlns='http://www.w3.org/TR/REC-html40'>" + "<head>" + "<title>Version and Release Management</title>";

strDocBody = strDocBody + "<!--[if gte mso 9]>" + "<xml>" + "<w:WordDocument>" + "<w:View>Print</w:View>" + "<w:Zoom>100</w:Zoom>" + "<w:DoNotOptimizeForBrowser/>" + "</w:WordDocument>" + "</xml>" + "<![endif]-->";

strDocBody = strDocBody + "<style> @page" + "{size:8.5in 11.0in; mso-first-footer:ff1; mso-footer: f1; mso-header: h1; border:solid navy 2.25pt; padding:24.0pt 24.0pt 24.0pt 24.0pt;" + " margin:0.75in 0.50in 0.75in 0.50in ; " + " mso-header-margin:.5in; " + " mso-footer-margin:.5in; mso-paper-source:0;}" + " div.Section1" + " {page:Section1;}" + "p.MsoFooter, li.MsoFooter, div.MsoFooter{margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:center 3.0in right 6.0in; font-size:12.0pt; font-family:'Arial';}" + "p.MsoHeader, li.MsoHeader, div.MsoHeader {margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:center 3.0in right 6.0in; font-size:12.0pt; font-family:'Arial';}" + "-->" + "</style>" + "</head>";

strDocBody = strDocBody + "<body lang=EN-US style='tab-interval:.5in'>" + "<div class=Section1>" + "<h1>This is my Heading</h1>" + "<h2>This is my Sub Heading</h2>" + "<p style='color:navy;'> This is blue text</p>" + "<p style='font-weight:bold; color:green;'><u> This is green bold underlined text </u></p>" + "<p style='color:red'><I>" + DateTime.Now + "</I></p>" + "<!--[if supportFields]>" + "<div style='mso-element:header' id=h1><p class=MsoHeader><span style='mso-tab-count:4'></span><span style='mso-field-code: PAGE '></span> </p></div>" + "<div style='mso-element:footer' id=f1> " + "<p class=MsoFooter style='border:none;mso-border-bottom-alt:solid windowtext .75pt;padding:0in;mso-padding-alt:0in 0in 1.0pt 0in'><o:p> </o:p></p> " + "Page <span style='mso-field-code: PAGE '><span style='mso-no-proof:yes'>1</span></span> of <span style='mso-field-code: NUMPAGES '></span>" + " <span style='mso-tab-count: 12'> <span style='mso-field-code: DATE '></span> " + " </p></div><![endif]-->" + "</div> </body> </html> ";

//Force this content to be downloaded as a Word document
Response.AddHeader("Content-Type", "application/msword");
Response.AddHeader("Content-disposition", "attachment; filename=TEST.doc");
Response.Charset = "";
Response.Write(strDocBody);
4

3 回答 3

0

根据我的经验,这确实不适用于 onClick,因为标头已经发送。

于 2011-08-30T09:32:31.937 回答
0

这可能是因为标头已发布到客户端浏览器。尝试使用 Response.Clear() 清除,确保您不在 Ajax 调用中。另一个技巧是打开一个新页面,使用带有动态编译参数的客户端锚点。

编辑:当然,如果您清除响应,则在要求用户下载文件后页面将为空白。始终牢记客户端-服务器 http 通信的无状态同步行为。

于 2011-08-30T09:33:02.963 回答
0

我想您正在尝试将数据strDocBody作为 Word 文件提供给用户。为了做到这一点,这些数据必须是 Web 服务器传递给浏览器的唯一内容。这就是为什么当您将它放入OnLoad事件处理程序时它可以正常工作的原因。当您将其放入按钮单击处理程序时,情况并非如此。

如果您希望在单击按钮时出现此行为,则此按钮必须将用户重定向到另一个 URL,该 URL 将发送文档数据,仅此而已。

专门为服务文档创建一个页面,让它成为Document.aspx。现在,我不知道您是否需要在单击按钮时执行任何其他逻辑。如果没有,您可以使用 LinkBut​​ton:

<asp:LinkButton runat="server" ID="docLink" Text="Document" 
                PostBackUrl="Document.aspx" />

否则,只需在您的 onClick 处理程序中添加重定向调用:

protected void btnButton1_Click(object sender, EventArgs e)
{
    // ....
    Response.Redirect("Document.aspx");
}
于 2011-08-30T09:33:24.777 回答