First, add ICompositeViewEngine
to your controller:
// You'll need these
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
public class MyController : Controller
{
private readonly ICompositeViewEngine _viewEngine;
public MyController(ICompositeViewEngine viewEngine)
{
_viewEngine = viewEngine;
}
}
Then, add the following method:
public async Task<string> RenderView([CallerMemberName] string viewName = null)
{
var view = _viewEngine.FindView(ControllerContext, viewName, true).View;
var writer = new StringWriter();
var viewContext = new ViewContext(
ControllerContext, view, ViewData,
TempData, writer, new HtmlHelperOptions()
);
await view.RenderAsync(viewContext);
return writer.ToString();
}
You can now call await RenderView()
and it will return your rendered view as
a string.