MVC3, .NET4, C#을 사용하고 있습니다.MVC3/Razor의 작업에서 "스트림"응답을 얻으려면 어떻게해야합니까?
면도기 뷰를 사용하여 일부 XHTML을 만들어야합니다. 나는 이것을 행동으로한다.
public ActionResult RenderDoc(int ReportId)
{
//A new document is created.
return View();
}
다음 출력을 가져와 Word 문서로 변환해야합니다. 다음처럼 "스트림"또는 DOC로 변환에서 읽을 수있는 XHTML 소스에 대한 "파일을"나는이 작업을 수행하는 제 3 자 구성 요소를 사용하고 있으며 기대 :
document.Open(MyXhtmlStream,FormatType.Html,XHTMLValidationType.Transitional);
내 질문 :
"RenderDoc"작업을 호출하고 그 결과를 "MyXhtmlStream"으로 보내는 스트림으로 얻는 좋은 방법은 무엇입니까?
감사합니다.
편집 : 다른 아이디어가 있습니다!
1) 동작 내에서보기를 렌더링하여 문자열 (XHTMLString)을 만듭니다. 나는 이렇게하는 방법을 보았다.
2) MemoryStream을 만들고이 문자열을 그 안에 넣습니다.
Stream MyStream = New MemoryStream("XHTMLString and encoding method");
EDIT2 : 대린의 대답
바탕으로 좀 더 clasyify해야하고, 나는 내 목적을 위해 대린의 코드를 조정을 통해이 작업을 수행 할 수 있도록 노력하겠습니다.
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);
}
}
위의 내용이 내가 필요한 것입니다. 타사 WordDocument 형식을 유의하십시오. 그래서 나는 "strXhtmlDocument"얼마나의 문제는 "Response.OutputStream에 여전히 존재
당신은 실제로 행동에서 그것을 얻을 수 없습니다. 파이프 라인에서 너무 일찍. –
// 새 문서가 생성되면 그 시점에 스트림이 있습니까?아니면 어딘가에서이 문서를 가져오고 있습니까? – Robert
스트림이 없습니다. 기본적으로 나는 방금 Render View를 사용하여 "RenderDoc"Action을 통해 XHTML을 만들었습니다. 그런 다음 이것을 DOC로 변환하려고합니다. 논리적으로 필자는이 작업에 대한 호출을 공개 메서드에 통합하려고했지만이 작업은 간단하지 않습니다. – SamJolly