2015-11-06 11 views
2

我在Sitecore中有一個自定義字段 - 一個帶有數字和富文本編輯器的複合字段。使用Sitecore,我如何使用cshtml文件和模型來渲染自定義字段?

事情的編輯器方面效果很好,但是當字段在沒有頁面編輯器的情況下渲染時,我想將它的格式委託給一個cshtml文件 - 發送一個我選擇的對象作爲模型。

我可以攔截呈現在DoRender:

protected override void DoRender(HtmlTextWriter output) 
    { 
     if (!Sitecore.Context.PageMode.IsPageEditor) 
     { 
      //here is where I want to delegate the output to a cshtml DisplayTemplate with the Value as the Model. 
     } 
     else 
     { 
      base.DoRender(output); 
     } 
    } 

但是我怎麼委派輸出到CSHTML DisplayTemplate與價值的模型?

回答

2

你必須渲染視圖到一個字符串,然後你可以使用它與HtmlTextWriter渲染出來。

這將使着眼於一個字符串:

public static string RenderPartialToString(string controlName, object viewData) 
{ 
    ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() }; 

    viewPage.ViewData = new ViewDataDictionary(viewData); 
    viewPage.Controls.Add(viewPage.LoadControl(controlName)); 

    StringBuilder sb = new StringBuilder(); 
    using (StringWriter sw = new StringWriter(sb)) 
    { 
     using (HtmlTextWriter tw = new HtmlTextWriter(sw)) 
     { 
      viewPage.RenderControl(tw); 
     } 
    } 
    return sb.ToString(); 
} 

然後你就可以修改你的代碼是這樣的:

protected override void DoRender(HtmlTextWriter output) 
{ 
    if (!Sitecore.Context.PageMode.IsPageEditor) 
    { 
     //here is where I want to delegate the output to a cshtml DisplayTemplate with the Value as the Model. 
     var model = new {}; // create your model 
     var viewString = RenderPartialToString("~/path/to/view.cshtml", model); 
     output.Write(viewString); 
    } 
    else 
    { 
     base.DoRender(output); 
    } 
} 

注意,此方法將繞過Sitecore的渲染管線渲染.cshtml時文件。

積分RenderPartialToString方法 - How to Render Partial View into a String

相關問題