簡體   English   中英

如何從MVC視圖返回流?

[英]How to return a stream from an MVC view?

我相信我已經很接近了,但是我的信息流為null或已被丟棄。 這是示例代碼。

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,因為流已被丟棄。 如果我將return移至using之外,則結果為null。 我在這里做錯了什么? 有什么想法可以使我正常工作嗎?

StreamWriter上的using語句還將關閉基礎流。 刪除StreamWriter上的using語句以使流保持活動狀態。
另一種選擇是返回字節數組而不是內存流。

return ms.ToArray();

要在using塊中使用一個類,該類必須實現IDisposable 塊結束時,它將調用IDisposable.Dispose()來處理您的Stream。 這是一個好習慣,但是如果要使用流,請刪除using或將return放入其中。 我會選擇第二種選擇。

您有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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM