我相当接近我相信,但我的流是空的或它被处置。这是示例代码。
var ms = new MemoryStream();
using (var sw = new StreamWriter(ms))
{
using (var tw = new HtmlTextWriter(sw))
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, null);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, tw);
ms.Position = 0;
return ms;
}
}
调用代码会导致objectDisposedException,因为流已被释放。如果我将返回移到using之外,则结果为null。我在这做错了什么?任何想法我怎么能正常工作?
答案 0 :(得分:2)
StreamWriter
上的using语句也将关闭基础流。
删除using
上的StreamWriter
语句以使流保持活动状态
另一种选择是返回一个字节数组而不是一个内存流。
return ms.ToArray();
答案 1 :(得分:0)
要在using
块中使用类,该类必须实现IDisposable
。当块结束时,它会调用IDisposable.Dispose()
来处理你的Stream。这是一个很好的做法,但如果您想要流,请删除using
或将回车放入其中。我会选择第二种选择。
答案 2 :(得分:-1)
你有2个标志他说要把返回放在外面使用()
像这样var ms = new MemoryStream();
using (var sw = new StreamWriter(ms))
{
using (var tw = new HtmlTextWriter(sw))
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, null);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, tw);
ms.Position = 0;
}
return ms;
}