2015-08-09 68 views
0

我試圖將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

當viewResult.View.Render(viewContext,sw);'失敗時會得到什麼樣的錯誤? – bowserm

+0

嗨@bowserm,這是我得到的錯誤: 「在System.Web.dll中發生類型'System.Web.HttpCompileException'的異常,但未在用戶代碼中處理 其他信息:外部組件已拋出例外。」 – Idoshhh

+0

聽起來可能錯誤是在部分視圖中,而不是在上面粘貼的代碼中?你能報告你正在嘗試渲染的PartialView內部發生了什麼?也許作爲一個測試,只要嘗試將PartialView扔到頁面上,而不是花費精力去查看它是否正確呈現。我的猜測是它無法在您的PartialView中編譯剃鬚刀。 – bowserm

回答

0

在這種情況下, HttpCompileException意味着系統無法渲染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) 
} 

,看看你能得到它試圖呈現爲一個字符串之前渲染添加PartialView頁面。否則,內部異常可能會有更多細節。