将视图渲染为字符串(有所不同)

时间:2018-09-12 07:44:58

标签: c# .net-core asp.net-core-2.0

我目前在我的应用程序中有一个部分,该部分使用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();
        }
    }

0 个答案:

没有答案