在我们的应用程序中,我们需要从 Application 获取 PDF 并且应该显示在 IE9[8 或 7] 上,Application 在 ASP.Net MVC 3 中,PDF 文件来自 SSRS,基于用户标准 SSRS 将返回 PDF 并且在标签中显示在浏览器上。
当我们在 Visual Studio 2010 中以调试模式运行应用程序并在 IIS7.5 中托管应用程序时,一切正常。但是,一旦我们在没有调试器的情况下访问应用程序,PDF 就不会在 Object Tag 中呈现或加载,甚至 Adobe AtiveX PDF Viewer 也不会出现。
因此,要找出问题所在,从 IE9 开发人员工具栏捕获网络日志并得知 URL:http://myhostname/Home/GetProfile/11
结果:已中止类型:启动器:ActiveX 控件初始化。
如果我在 Chrome 中访问相同的应用程序,chrome 加载 PDF 没有任何问题,但 IE9 无法加载 PDF。
下面是代码。
标准页面
<body>
<div>
<form id ="frmReport" method="get" action='@Url.Action("Report","Home")'
target="iReport">
<input type="text" />
<input type="submit" value="Click"/>
</form>
<iframe id="iReport" name="iReport"></iframe>
</div>
</body>
在上面的 iReport iframe 将获得具有对象标签的结果 HTML
报告查看器 html 代码。
<div id="reportContainer">
@{string urlPDF = "http://myhostname" + @Url.Action("GetProfile",
"Home", new { Id = "11" });
<object id = "pdfView" height="600px" width="100%"
type='application/pdf' data='@urlPDF'>
</object>}
</div>
MVC 应用程序中的代码。
public FileStreamResult GetProfile(string Id)
{
var contentDisposition = new ContentDisposition
{
FileName = "Profile.pdf",
Inline = true
};
Response.AppendHeader("Content-Disposition", contentDisposition.ToString());
byte[] bytes = ReportStore.GetProfileInByte(Id);
MemoryStream ms = new MemoryStream(bytes);
return new FileStreamResult(ms, MediaTypeNames.Application.Pdf);
}
在 pf FileStreamResult 中尝试了 FileContentResult,问题是一样的。
谁知道IE9有什么问题?我跟踪了服务器响应的请求没有任何问题区域的应用程序,但是 IE9-PDF ActiveX 没有处理内容呈现,有人知道可能是什么原因吗?
不仅如此,当我在我们的几台机器上尝试时,结果同样令人失望。机器有 IE9 和 AdobePDFReder 9\10。使用 VS.Net 调试器的任何地方都可以正常工作,但是一旦从调试器中出来,事情就会开始失败。
谢谢