2

我在 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?

4

1 回答 1

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-如何将部分视图呈现为字符串

于 2015-11-06T15:52:14.610 回答