如何在asp.net中将布局渲染为字符串?

时间:2018-04-26 11:21:53

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我将整个布局作为数据库中的字符串,我想将布局从数据库渲染到我的视图。 例如:

 public ActionResult index()
 {
   string layout = GetLayout();

   //in below how should I render layout to view 
   return View("index", layout);
 }

我已经使用result = Engine.Razor.RunCompile(template, key.ToString());来渲染布局,但它无法呈现HTML帮助程序。

2 个答案:

答案 0 :(得分:1)

我正在使用下面的代码,它对我来说很好。我也在Web API中使用它来以字符串的形式返回View。

您可以创建静态类,并在下面创建静态方法。

 public string RenderPartialView(string controllerName, string viewName, object model = null) {
     System.Web.HttpContextBase contextBase = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);

     var routeData = new RouteData();
     routeData.Values.Add("controller", controllerName);
     var controllerContext = new System.Web.Mvc.ControllerContext(contextBase, routeData,
      new EmptyController());

     var razorViewEngine = new System.Web.Mvc.RazorViewEngine();
     var razorViewResult = razorViewEngine.FindPartialView(controllerContext, viewName, false);

     var writer = new StringWriter();
     System.Web.Mvc.ViewContext viewContext;


     viewContext = new System.Web.Mvc.ViewContext(controllerContext, razorViewResult.View,
      new System.Web.Mvc.ViewDataDictionary(model), new System.Web.Mvc.TempDataDictionary(), writer);

     viewContext.ViewData["controller"] = controllerName;

     HttpContext.Current.Items.Add("controller", controllerName);

     razorViewResult.View.Render(viewContext, writer);

     string htmlString = writer.ToString();
     writer.Dispose();

     return htmlString;
    }
private class EmptyController: System.Web.Mvc.ControllerBase {
  protected override void ExecuteCore() {}
 }

现在请举例说明我们如何从控制器中调用它。

RenderPartialView("Home", string.Format("~/Views/Home/{0}.cshtml", "Index"));

我希望这对你有用。

答案 1 :(得分:0)

似乎没有内置机制来实现那个。需要有一个自定义解决方案。本主题已在本文中讨论过。 Dynamically Produce Razor Views at Runtime?你可以推荐那个。