5

我正在寻找一些关于如何解决这个问题的建议。任何输入表示赞赏!

目前,我有一个 ASP.NET MVC 应用程序。在客户端,我有一个带有 XPS 文档 ID 的链接。当用户单击该链接时,他们会被带到一个包含文档详细信息的页面。除了此信息之外,我希望在同一页面中显示此信息旁边的文档。

在服务器端,一旦我有了 ID,我就可以从数据库中获取文档,序列化为字节数组。问题是,将序列化文档放入网页的最佳方式是什么?

我非常希望不必将该文档放入文件系统中,然后将文件路径组合在一起。我希望能够将文档作为“application/vnd.ms-xpsdocument”的内容类型流式传输到浏览器。

我尝试使用 Web 控件来处理这个问题(不能写出二进制文件),考虑过创建一个 HTTP 处理程序来执行此操作(不知道从哪里开始),并且已经搞砸了其他几种获取文档的方法流到浏览器。

此外,还有如何在网页中嵌入文档的问题。我是否使用 EMBED 标签?还是一个对象?或者我是否使用 iframe 并将源设置为指向提供文档的任何内容?

再说一次,我不希望一个解决方案包在一个弓上。我正在寻找一些关于如何解决这个问题的建议。而且,虽然这个问题是关于 xps 文档的,但它适用于流式传输要在浏览器中托管的二进制文件(PDF 等)的任何应用程序。


好的,至于在浏览器中显示,一个字:Silverlight。这就解决了。我仍然有找出从服务器发送到浏览器的最佳方式的问题。


打那个。Silverlight 似乎还不够先进,无法显示 XPS 文档。我现在正在考虑一个指向 http 处理程序的 iframe ... iframe 有效。太糟糕了,它把整个事情都扔到了管道里。我想我总是可以撕掉第一页然后送那只小狗……


哇。不需要 HTTP 处理程序。MVC 中的自定义 ActionResult 就是您所需要的。这有多可怕?

4

2 回答 2

2

我认为最简单的方法是从详细信息页面提供文档作为链接 (target="_blank")。这有几个优点:

  • 除非用户要求,否则您不需要检索和流式传输整个文档。
  • 在我的系统上,至少 IE 已经注册为默认的 XPS 查看器,因此通过为文档提供它自己的窗口,您可以避免如何嵌入它的整个问题。
  • 它使为文档提供流式源变得简单:只需使用带有 ID 的 HTTP 处理程序作为查询字符串参数。

即使您不喜欢这个想法,也一定要使用 HTTP 处理程序来传输文档。做起来真的很简单:当你在 Visual Studio 中创建一个新的 HTTP 处理程序时,它应该会给你一个漂亮的页面,所有的工作都已经完成了。

于 2008-09-30T18:31:50.773 回答
1

有一个 Silverlight 控件能够显示 XPS 文档。有关更多信息,请参见http://firstfloorsoftware.com/blog/announcement-document-toolkit-for-silverlight/

于 2009-04-02T12:12:25.010 回答