I am experimenting in MVC 4, and i was wandering if it is possible to turn a string into a View and return this from the Controller.
For instance, i have a method that reads the View contents into a string. I would like to process that string before rendering it. So i would like the Controller to output the modified string as a View.
Is this even possible?
Just to make a note, this will happen after Razor has made any changes. I do have a method that gets the final View into a string.
Edit
I have the following method:
    public static string RenderViewToString(this Controller controller, string viewName, object model)
    {
        controller.ViewData.Model = model;
        try
        {
            using (StringWriter sw = new StringWriter())
            {
                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, sw);
                viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View);
                return sw.ToString();
            }
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
    }
which returns the finally rendered View (what is actually going to be displayed in the browser) into a string.
I need to do the opposite. Having a string, output a View.
So if i have the following cshtml:
<!doctype html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
    Hello World
</body>
</html>
The above function will return a string like:
"<!doctype html><head><title>MyActualTitle</title></head><body>Hello World</body></html>"
Now what i want is take this string, manipulate it and render it. For instance i want to change the Hello World. I know i can do this with Razor, i was just wandering if i can do this with another method.
Yes is possible:
public sealed class StringController : Controller
{
    //
    // GET: /String/
    public string Index()
    {
        return "Hello world!";
    }
}
If you want razor to process it before returning, then I'm not sure how to do that, but you probably don't need to go via a View to do that.
If you need to create a view form string .Then see this discussions
Render a view as a string
ASP.NET MVC3 Razor - create view from a string?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With