我在Sitecore中有一个自定义字段 - 一个带有数字和富文本编辑器的复合字段。
编辑方面的工作很好,但是当没有页面编辑器渲染字段时,我想将其格式委托给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,并将Value作为模型?
答案 0 :(得分: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);
}
}
请注意,此方法在呈现.cshtml文件时会绕过Sitecore渲染管道。
RenderPartialToString
方法的归功 - How to Render Partial View into a String