我尝试将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();
}
}
答案 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)
}
在尝试将其渲染为字符串之前,查看是否可以将其渲染。否则,内部异常可能会有更多细节。