Как сделать макет как строку в asp.net? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть весь макет в виде строки в моей базе данных, и я хочу отобразить макет из базы данных в мой вид. например:

 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 голосов
/ 26 апреля 2018

Я использую приведенный ниже код, и он работает нормально для меня. Я также использую его в 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"));

Надеюсь, это будет полезно для вас.

0 голосов
/ 26 апреля 2018

Кажется, что нет встроенного механизма для достижения этого. Нужно иметь индивидуальное решение для этого. Эта тема уже обсуждалась в этом посте. Динамически создавать Razor Views во время выполнения? Вы можете сослаться на это.

...