Render view to string outside controller?
Is it possible to render a view from a class, which is not controller? 开发者_如何转开发
For example, I'm having a class which will return some data, like controls, which i want to derive from my view.
Is it possible?
Thanks in advance.
The open source Razor Engine does exactly what you need: https://github.com/Antaris/RazorEngine
string razorText = System.IO.File.ReadAllText(razorTemplateFileLocation);
string emailBody = Razor.Parse(razorText, yourViewModel);
I did it using this:
Rendering ASP.NET MVC Razor Views outside of MVC
Quite easy. You just need to add one class(ViewRenderer.cs) and it is ready to use.
For example, I can put this code outside Controller:
string html = ViewRenderer.RenderView($"~/Views/Partials/Email/WelcomeEmail.cshtml", viewModel);
In a view, we have a method named Html.Partial which renders a partial to a string. Within your controller, you can instantiate an HtmlHelper instance and then call the Partial extension method on it. Make sure you import the System.Web.Mvc.Html namespace in your controller.
精彩评论