Pregunta

Estoy buscando algunas sugerencias sobre cómo hacer esto. Cualquier entrada es apreciada!

Actualmente, tengo una aplicación MVC ASP.NET. En el cliente, tengo un enlace con un ID de un documento XPS. Cuando el usuario hace clic en el enlace, pasa a una página con detalles sobre el documento. Además de esta información, deseo mostrar el documento junto a esta información, en la misma página.

En el lado del servidor, una vez que tengo el ID, puedo obtener el documento, serializado como una matriz de bytes, de la base de datos. La pregunta es, ¿cuál es la forma mejor de obtener ese documento serializado en la página web?

Preferiría MUCHAMENTE no tener que colocar ese documento en el sistema de archivos y luego mezclar una ruta de archivo. Me gustaría poder transmitir el documento al navegador como un tipo de contenido de " application / vnd.ms-xpsdocument " ;.

He intentado usar un control web para manejar esto (no se puede escribir en binario), pensé en crear un controlador HTTP para hacer esto (no tengo idea de por dónde empezar), y me he metido en un par de otras formas de obtener el flujo de documentos para el navegador.

Además, también está la cuestión de cómo incrustar el documento en la página web. ¿Utilizo una etiqueta EMBED? ¿O un objeto? ¿O uso un iframe y configuro la fuente para que apunte a lo que entrega el documento?

Una vez más, no espero una solución envuelta en un arco. Estoy buscando un consejo sobre cómo hacer esto. Y, aunque esta pregunta es sobre documentos xps, se aplica a cualquier aplicación que transmita un archivo binario que se alojará en un navegador (archivos PDF, etc.).


Bien, en cuanto a mostrar en el navegador, una palabra: Silverlight. Eso está resuelto. Todavía tengo el problema de averiguar la mejor manera de enviarlo desde el servidor al navegador.


Golpea eso. Parece que Silverlight no está lo suficientemente avanzado como para mostrar un documento XPS todavía. Estoy pensando en un iframe que apunta a un controlador http ahora ... El iframe funciona. Lástima que tira toda la cosa por la tubería. Supongo que siempre podría quitar la primera página y enviar ese cachorro ...


Wow. No es necesario un controlador HTTP. Un ActionResult personalizado en MVC es todo lo que necesita. ¿Qué tan increíble es eso?

¿Fue útil?

Solución

Creo que la forma más sencilla sería proporcionar el documento como un enlace (target = " _blank ") desde la página de detalles. Esto tiene varias ventajas:

  • No es necesario recuperar y transmitir todo el documento a menos que el usuario lo solicite.
  • En mi sistema, al menos IE ya está registrado como el visor XPS predeterminado, por lo que al dar al documento su propia ventana, evitará toda la cuestión de cómo incrustarlo.
  • Hace que sea sencillo proporcionar una fuente de transmisión para el documento: solo use un controlador HTTP con un ID para un parámetro de cadena de consulta.

Incluso si no te gusta esa idea, definitivamente elige un controlador HTTP para transmitir documentos. Es muy simple de hacer: cuando creas un nuevo controlador HTTP en Visual Studio, debería darte una buena página con todo el trabajo ocupado ya realizado.

Otros consejos

Hay un control de Silverlight capaz de mostrar documentos XPS. Consulte http://firstfloorsoftware.com/blog/announcement-document-toolkit- for-silverlight / para más

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top