使用Razor将PartialView渲染为字符串MVC4

时间:2015-11-27 17:06:36

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

当使用带有mvc4的剃须刀视图引擎时,如何将部分视图渲染到控制器中的字符串

使用webView(Aspx):

public static string RenderPartialView(this Controller controller, string viewName, object model)
        {
            if (string.IsNullOrEmpty(viewName))
                viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

            controller.ViewData.Model = model;
            using (var sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
                var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
                viewResult.View.Render(viewContext, sw);

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

我用剃刀尝试了这个解决方案,但它无法解析视图,错误信息:

  

视图不能为null => ViewResult.View

1 个答案:

答案 0 :(得分:-1)

如果找不到viewName但是viewResult.View属性为null,则对FindPartialView的调用不会抛出异常。

此外,当无法找到视图时,viewResult.SearchedLocations将包含搜索视图的位置列表。这将显示您搜索视图的位置。

所以,考虑到原始问题中没有太多信息(我无法用额外的问题发表评论),我最好的选择是你传入的viewName不能由任何视图引擎发现。