1

我有一个使用 MVC 的 Sitecore 7.1 解决方案,并且正在使用@Html.Sitecore().Field("FieldName", ContentItem). 因为我想要多行文本字段来渲染<br/>标签,所以我已经GetTextFieldValue从 renderField 处理器部分中删除了处理器,web.config使用了App_Config\Include这里描述的补丁文件:http: //laubplusco.net/sitecore-update-bummer/。我发现如果我使用Sitecore.Web.UI.WebControls.FieldRenderer.Render()它会按预期产生带有换行符的输出,但是如果我使用Html.Sitecore().Field()扩展方法,则不会呈现换行符。

我发现你可以写

@Html.Sitecore().Field("FieldName", item, new { linebreaks = "<br/>" })

这似乎可以完成这项工作。

是否需要设置其他一些配置以使Field()扩展方法的行为方式与 相同FieldRenderer.Render,或者我只需要使用上面的方法?

4

1 回答 1

2

对于 MVC 和 WebForms,字段渲染的实现似乎有所不同。您可以检查Sitecore.Web.UI.WebControls.FieldRenderer.RenderField().NET Reflector 中的代码。RenderFieldArgs在调用渲染字段管道之前,它会为多行字段添加换行符:

        if (item.Fields[this.FieldName].TypeKey == "multi-line text")
        {
            args.RenderParameters["linebreaks"] = "<br/>";
        }

在@Html.Sitecore().Field(...) 中,渲染管道以类似的方式调用,但渲染参数设置不同,不添加“换行符”。为了使每次渲染的行为都相同,您可以添加您自己的处理器,其逻辑与上述代码中的代码相同Sitecore.Web.UI.WebControls.FieldRenderer.RenderField()。不知何故像这样:

public void Process(RenderFieldArgs args)
{
    Assert.ArgumentNotNull((object)args, "args");

    if (args.FieldTypeKey == "multi-line text")
        args.RenderParameters["linebreaks"] = "<br/>";
}

并使用包含文件将其添加到您的渲染字段管道中。

于 2014-08-26T15:20:13.483 回答