Визуализация представления в строку (с разницей) - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время в моем приложении есть раздел, который с помощью вызова Ajax возвращает HTML, который в основном является частичным представлением, которое преобразуется в строку.Это работает отлично.Я включил свой код ниже, как я этого добиваюсь.Моя проблема в том, что я сейчас нахожусь в ситуации, когда это частичное представление теперь в некоторых случаях должно отображать само частичное представление.

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

Кажется, что визуализация частичного представления внутри метода, который отображает частичное представление строки, не работает.

Есть идеи, как это исправить?

Мой код для рендеринга частичного представления в строку

public static string RenderViewToString<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
    {
        if (string.IsNullOrEmpty(viewName)) viewName = controller.ControllerContext.ActionDescriptor.ActionName;

        controller.ViewData.Model = model;

        using (var writer = new StringWriter())
        {
            IViewEngine viewEngine =
                controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as
                    ICompositeViewEngine;
            var viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);

            if (viewResult.Success == false) return $"A view with the name {viewName} could not be found";

            var viewContext = new ViewContext(
                controller.ControllerContext,
                viewResult.View,
                controller.ViewData,
                controller.TempData,
                writer,
                new HtmlHelperOptions()
            );

            viewResult.View.RenderAsync(viewContext);

            return writer.GetStringBuilder().ToString();
        }
    }
...