Sto utilizzando MVC3, .NET4, C#.Come ottenere una risposta "stream" da un'azione in MVC3/Razor?
Ho bisogno di creare un XHTML usando una vista del rasoio. Lo faccio tramite un'azione.
public ActionResult RenderDoc(int ReportId)
{
//A new document is created.
return View();
}
Ho quindi bisogno di prendere l'output da questo e convertirlo in un documento di Word. Sto usando un componente di terze parti per fare questo e si aspetta un "flusso" o un "file" per la sorgente XHTML che viene letta in per la conversione in un DOC, come il seguente:
document.Open(MyXhtmlStream,FormatType.Html,XHTMLValidationType.Transitional);
La mia domanda :
Quale sarebbe un buon modo per chiamare l'azione "RenderDoc" e ottenere il risultato come flusso da inserire in "MyXhtmlStream".
Molte grazie.
EDIT: Ho avuto un'altra idea !!!
1) Visualizzare la vista all'interno dell'azione per creare una stringa (XHTMLString). Ho visto un metodo per farlo su SO.
2) Creare un MemoryStream e inserire questa stringa in esso.
Stream MyStream = New MemoryStream("XHTMLString and encoding method");
EDIT2: Sulla base di risposta di Darin
ho bisogno di clasyify un po 'più, e spero di fare questo via modificando il codice di Darin per il mio scopo.
public class XmlDocumentResult : ActionResult
{
private readonly string strXhtmlDocument;
public XmlDocumentResult(string strXhtmlDocument)
{
this.strXhtmlDocument = strXhtmlDocument;
}
public override void ExecuteResult(ControllerContext context)
{
WordDocument myWordDocument = new WordDocument();
var response = context.HttpContext.Response;
response.ContentType = "text/xml";
myWordDocument.Open(response.OutputStream, FormatType.Html, XHTMLValidationType.Transitional);
}
}
Quanto sopra è più vicino a quello che mi serve. Nota il tipo WordDocument di terze parti. Quindi non v'è ancora la questione di come ottengo il "strXhtmlDocument" in "Response.OutputStream
non puoi davvero ottenerlo dall'azione. questo è troppo presto nella pipeline. –
Quando dici // viene creato un nuovo documento hai uno stream in quel punto?O stai recuperando questo documento da qualche parte? – Robert
Non ho flusso. Fondamentalmente ho appena usato una Razor View, tramite l'azione "RenderDoc", per creare l'XHTML. Quindi voglio convertire questo in un DOC. Logicamente speravo di incorporare semplicemente una chiamata a questa azione nel metodo aperto, ma non è così semplice. – SamJolly