我使用这里的答案(https://stackoverflow.com/a/2759898)渲染视图作为字符串。渲染视图作为字符串(异步)
我是新来的异步等待的事情。只需要知道下面的代码是否会真正释放资源,直到渲染视图?假设我的视图需要5秒才能呈现。
public async Task<string> RenderViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
return await Task.Run(() =>
{
var razor = new RazorViewEngine();
var viewResult = razor.FindView(ControllerContext, viewName, null, false);
var viewContext = new ViewContext(ControllerContext, viewResult.View,
ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
});
}
}
P.S.不要问我为什么我的观点需要时间来呈现。虽然这不是一个推荐的做法,但是对于这个特定的实例,我必须在视图中调用几个Web服务并创建json输出。
我知道这是一个不好的做法,但我迫切需要这样做,作为我们当前项目中的临时黑客。我们将尽快解决它。 – user3219798