如何将部分视图渲染为字符串

时间:2015-08-09 13:26:27

标签: c# model-view-controller rendering umbraco partial-views

我尝试将Umbraco Children项目转换为PartialView,但我希望它以字符串形式返回,而不是部分视图。

我在论坛上看了很多,当我尝试这些例子时我遇到了错误。

当用户进入网站时,我想从控制器获取几个不同的模板。 每隔几个小时,我的意思是,在几个小时内通过Ajax查看是否有这个时间的新项目。 ajax正常工作。

我收到一条错误,指出“对象引用未设置为对象的实例”。而且我真的不知道错误是什么,模型是什么?是部分名称?怎么了?或者如何使它发挥作用。

这是我的代码

foreach (dynamic item in rangeTime.Children)
                    {
                        var docType = item.ContentType.Alias;
                        var partialViewToShow = docType.ToString().Trim().ToLower().Replace(" ", "") == "birthday" ? "BDay" : "ContentPage";

                        st.Append(string.Format("<div class=\"custom-item\" data-time-to-show=\"{0}\">", item.slideTime));
                        st.Append(RenderPartialViewToString(partialViewToShow, item));
                        st.Append("</div>");
                    }

调用此函数:(失败的“viewResult.View.Render(viewContext,sw);”)

 protected string RenderPartialViewToString(string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.RouteData.GetRequiredString("action");

        ViewData.Model = model;

        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw); // FAIL HERE

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

1 个答案:

答案 0 :(得分:0)

在这种情况下,HttpCompileException意味着系统无法呈现PartialView,因为它无法正确编译剃刀。

我建议使用

将PartialView添加到页面中
foreach (dynamic item in rangeTime.Children)
{
    var docType = item.ContentType.Alias;
    var partialViewToShow = docType.ToString().Trim().ToLower().Replace(" ", "") == "birthday" ? "BDay" : "ContentPage";

    Html.Partial(partialViewToShow, item)
}

在尝试将其渲染为字符串之前,查看是否可以将其渲染。否则,内部异常可能会有更多细节。