When using the "Send page by email" feature in Internet Explorer for pages within our application that include a Crystal Reports ASP.Net viewer, it drafts the email in Outlook with the web page as an attachment, rather than as the body of the email.
With a previous version of the framework (v1.1), and associated Crystal report viewer, this was not the case. Given those older versions are now unsupported, I'd like to know if there is any way I can "encourage" the "Send page by email" feature of Internet Explorer to send my ASP.Net page as the body instead of as an attachment?
For reference, the source for the viewer is simply:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="GeneralReport.aspx.vb" Inherits="MyApplication.GeneralReportForm"%>
<%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title></title>
<meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
<meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<LINK href="Styles.css" type="text/css" rel="stylesheet">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<div id="contentstart"> </div>
<DIV><CR:CRYSTALREPORTVIEWER id="CrystalReportViewer" runat="server" DisplayToolbar="False" SeparatePages="False"
HasDrillUpButton="False" EnableDrillDown="False" DisplayGroupTree="False" HasSearchButton="False" HasZoomFactorList="False"
HasGotoPageButton="False" Visible="False" Height="50px" Width="350px"></CR:CRYSTALREPORTVIEWER>
</DIV>
<br>
<asp:label id="lblError" runat="server" Width="743px" Font-Size="Larger" ForeColor="Red"></asp:label>
</form>
</body>
</HTML>
I开发者_如何转开发n the code behind, we simply have:
Dim rpt As New MyReport()
rpt.SetDataSource(ds)
CrystalReportViewer.ReportSource = rpt
CrystalReportViewer.Visible = True
This may not be a direct answer to your question, but I suggest making your solution not too dependent on a browser feature that may not be or be differently supported in future versions of your preferred browser.
If your web application supports something like a permanent URL for each specific report rendering, an email with the URL as a link should be enough.
Another option would be to render your report as PDF (or XLS) to get a snapshot that can be safely attached to your email.
Still another option is to not depend on the client's browser an email abilities but to send emails by the web application itself through an SMTP server.
Here is an example of how to send an email with an attachment in VB.NET
In case all of the above is not an option to you, in some cases I had success budging IE to change its guess-how-to-handle-page-content behavior by sending an additional http header (as defined in http://www.ietf.org/rfc/rfc2183.txt)
content-disposition: inline
versus content-disposition: attachment
Example (C#) to put before final report rendering
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentType = "text/html";
HttpContext.Current.Response.AddHeader("content-disposition", "inline; filename=report.htm");
It's determined by the protocal (file or HTTP) and the content of the web page.
Web pages that you access by using the "file://" protocol (for example, files on your local computer or local area network) are sent as attachments with an .htm extension. Web pages that you access by using the "http://" protocol are sent as attachments with a .txt extension if the HTML file contains a large comment before the tag.
http://support.microsoft.com/kb/304694
精彩评论