5

我正在 MVC 4 中进行试验,如果可以将字符串转换为视图并从控制器返回它,我正在徘徊。

例如,我有一个将视图内容读入字符串的方法。我想在渲染之前处理该字符串。所以我希望控制器将修改后的字符串作为视图输出。

这甚至可能吗?

请注意,这将在 Razor 进行任何更改后发生。我确实有一种方法可以将最终视图转换为字符串。

编辑

我有以下方法:

    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();
        }
    }

它将最终渲染的视图(实际上将在浏览器中显示的内容)返回到一个字符串中。

我需要做相反的事情。有一个字符串,输出一个视图。

所以如果我有以下内容cshtml

<!doctype html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
    Hello World
</body>
</html>

上面的函数将返回一个字符串,如:

"<!doctype html><head><title>MyActualTitle</title></head><body>Hello World</body></html>"

现在我想要的是获取这个字符串,操纵它并渲染它。例如,我想更改Hello World. 我知道我可以做到这一点Razor,如果我能用另一种方法做到这一点,我只是在徘徊。

4

3 回答 3

3

是的是可能的:

public sealed class StringController : Controller
{
    //
    // GET: /String/
    public string Index()
    {
        return "Hello world!";
    }
}

如果您希望剃须刀在返回之前对其进行处理,那么我不确定该怎么做,但是您可能不需要通过 aView来执行此操作。

于 2013-10-07T10:17:43.510 回答
2

如果您需要创建视图表单字符串。然后查看此讨论

将视图渲染为字符串

ASP.NET MVC3 Razor - 从字符串创建视图?

于 2013-10-07T10:11:32.817 回答
1

你可以用Content这个。

public ActionResult Index()
{
      return Content("Some string output");
}
于 2013-10-07T10:24:09.160 回答