Używam MVC3, .NET4, C#.Jak uzyskać odpowiedź "strumień" z akcji w MVC3/Razor?
Potrzebuję stworzyć trochę XHTML przy użyciu widoku maszynki. Robię to poprzez działanie.
public ActionResult RenderDoc(int ReportId)
{
//A new document is created.
return View();
}
Następnie należy pobrać dane wyjściowe z tego i przekonwertować go do dokumentu Word. Używam składnik 3rd party to zrobić i że spodziewa się „strumień” lub „plik” dla źródła XHTML, który jest odczytywany przez konwersję do DOC, jak następuje:
document.Open(MyXhtmlStream,FormatType.Html,XHTMLValidationType.Transitional);
moje pytanie :
Jaki byłby dobry sposób wywoływania akcji "RenderDoc" i uzyskania wyniku jako strumienia do "MyXhtmlStream".
Wielkie dzięki.
EDYCJA: Mam inny pomysł !!!
1) Renderuj widok w ramach akcji, aby utworzyć ciąg (XHTMLString). Widziałem metodę to zrobić na SO.
2) Utwórz obiekt MemoryStream i umieść w nim ciąg znaków.
Stream MyStream = New MemoryStream("XHTMLString and encoding method");
EDIT2: Na podstawie Darin za odpowiedź
muszę clasyify trochę dalej i mam nadzieję to zrobić poprzez szczypanie kodu Darin dla mojego celu.
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);
}
}
Powyższe jest bliższe temu, czego potrzebuję. Zwróć uwagę na typ WordDocument firmy zewnętrznej. Więc jest jeszcze kwestia tego, jak otrzymuję „strXhtmlDocument” do „Response.OutputStream
Naprawdę nie można uzyskać tego z działania. to zbyt wcześnie w przygotowaniu. –
Kiedy mówisz, że // Tworzony jest nowy dokument, czy masz strumień w tym momencie?A może wyszukujesz gdzieś ten dokument? – Robert
Nie mam strumienia. Zasadniczo użyłem widoku Razor View, poprzez akcję "RenderDoc", aby utworzyć XHTML. Następnie chcę przekonwertować to na DOC. Logicznie rzecz biorąc, miałem nadzieję, że po prostu włączę wezwanie do tej akcji do metody otwartej, ale nie jest to takie proste. – SamJolly