我相信我相当接近,但我的流要么为空,要么已被处理。下面是示例代码:
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。我哪里做错了?有什么办法能让它正常工作吗?
StreamWriter
上的using语句也将关闭底层流。删除StreamWriter
上的using
语句以保持流存活。
另一个选项是返回字节数组而不是内存流。
return ms.ToArray();
要在using
块中使用类,该类必须实现IDisposable
。当块结束时,它调用IDisposable.Dispose()
来处理你的流。这是一个很好的做法,但是如果您想要流,要么删除using
,要么将返回值放入其中。我会选择第二个选项
你有两种用法他说的是使用()将返回值放入外部
like this
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;
}