Render Razor отображает строку в ASP.NET 5

В предыдущих версиях ASP.NET было возможно, хотя и не очень просто, отображать представления Razor как строки. Методы, которые, как мне кажется, должны использовать поддельный controller, а также использовать какой-то внешний движок, такой как RazorEngine .

Теперь многое изменилось с помощью ASP.NET 5, и мне стало интересно, проще или нет это сейчас. Итак, в новой версии фреймворка есть один простой способ визуализации представлений Razor в виде строк или нам все еще нужно использовать методы из предыдущих версий?

Я использую следующие типы, вводимые из IServiceProvider :

 ICompositeViewEngine viewEngine; ITempDataProvider tempDataProvider; IHttpContextAccessor httpContextAccessor; 

Я обрабатываю контент, используя следующий метод:

 private async Task RenderView(string path, ViewDataDictionary viewDataDictionary, ActionContext actionContext) { using (var sw = new System.IO.StringWriter()) { var viewResult = viewEngine.FindView(actionContext, path); var viewContext = new ViewContext(actionContext, viewResult.View, viewDataDictionary, new TempDataDictionary(httpContextAccessor, tempDataProvider), sw); await viewResult.View.RenderAsync(viewContext); sw.Flush(); if (viewContext.ViewData != viewDataDictionary) { var keys = viewContext.ViewData.Keys.ToArray(); foreach (var key in keys) { viewDataDictionary[key] = viewContext.ViewData[key]; } } return sw.ToString(); } } 

Я называю это так:

 var path = "~/Views/Home/Index.cshtml"; var viewDataDictionary = new ViewDataDictionary(new Microsoft.AspNet.Mvc.ModelBinding.EmptyModelMetadataProvider(), new Microsoft.AspNet.Mvc.ModelBinding.ModelStateDictionary()); var actionContext = new ActionContext(httpContextAccessor.HttpContext, new Microsoft.AspNet.Routing.RouteData(), new ActionDescriptor()); viewDataDictionary.Model = null; var text = await RenderView(path, viewDataDictionary, actionContext); 

Конечно, мои переменные viewDataDictionary и actionContext устанавливаются другим методом для инкапсуляции. Модификация new ViewDataDictionary строки new ViewDataDictionary может привести к тому, что типичная модель привязана к вашему представлению, если вы выберете.

Этот код использует тяжелые операции, я думаю, что я перечислил их ниже. В противном случае VS2015 неплохо находит их.

 using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc.Rendering; 

Это было написано под бета-3; он все еще строит, но некоторые вещи могут измениться. Я попытаюсь вернуться сюда, чтобы обновиться, если это произойдет.

Есть решение, которое я использовал год назад. Я не уверен, что есть новый / лучший способ сделать, но он решает проблему.

 public string RenderViewToString(string viewName, object model) { ViewData.Model = model; using (var sw = new StringWriter()) { var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); return sw.GetStringBuilder().ToString(); } } 
  • Как импортировать пространство имен на странице просмотра Razor?
  • ASP.Net MVC 4 Форма с двумя кнопками / действиями отправки
  • Предоставление частичных представлений с использованием ajax
  • Как редактировать несколько моделей в одном представлении Razor
  • Razor: @ Html.Partial () vs @RenderPage ()
  • Дата не отображается на модели с типом ввода типа HTML
  • MVC3 Razor DropDownListFor Enums
  • Сложные модели и частичные представления - проблема с привязкой модели в ASP.NET MVC 3
  • Razor Views не видит System.Web.Mvc.HtmlHelper
  • Как получить текущий URL страницы в MVC 3
  • 'object' не содержит определения для 'X'
  • Давайте будем гением компьютера.