如何不渲染链接标题与Sitecore玻璃映射器

本文关键字:Sitecore 玻璃 映射 标题 何不渲 链接 | 更新日期: 2023-09-27 18:16:57

我正在用GlassMapper的这个方法渲染Sitecore Link:

        <li>
            <%=GlassHtml.RenderLink(icon, x => x.Link, null, true, string.Empty) %>
        </li>

但不希望在编辑模式下显示链接描述

所以即使链接描述被填充,它也会像这样呈现:

<a href='https://url.com' class='icon-facebook' target='_blank' ></a>

而不是像这样:

<a href='https://url.com' class='icon-facebook' target='_blank' >Link description</a>

所以我想知道如果GlassHtml。RenderLink可以覆盖这种目的吗?Tnx

如何不渲染链接标题与Sitecore玻璃映射器

如果页面处于编辑模式,其中一个选项是为内容添加空白。它不会使链接为空,但它不会显示它的描述。

<% if (IsInEditingMode)
       { %>
      <li>
                <%=GlassHtml.RenderLink(icon, x => x.Link, isEditable: true, contents: " ") %>
            </li>
    <% } else {%>
          <li>
                <%=GlassHtml.RenderLink(icon, x => x.Link, null, true, string.Empty) %>
            </li>
    <%}%>

另一个选择是编写自己的glass扩展。(关于如何做这样的事情的更多信息,你可以看到这个线程- Glass Mapper RenderLink链接描述-默认文本如果为空)

玻璃。Mapper是开源的,你可以在这里看到渲染链接是如何工作的:

https://github.com/mikeedwards83/Glass.Mapper/blob/master/Source/Glass.Mapper.Sc/GlassHtml.cs(方法从第297行开始)。

要扩展它,你需要这样做

public virtual string RenderEmptyLinkInEditing<T>(T model, Expression<Func<T, object>> field, object attributes = null, bool isEditable = false, string contents = null)
        {
            NameValueCollection attrs = null;
            if (attributes is NameValueCollection)
            {
                attrs = attributes as NameValueCollection;
            }
            else
            {
                attrs = Utilities.GetPropertiesCollection(attributes, true);
            }
            var sb = new StringBuilder();
            var writer = new StringWriter(sb);
            RenderingResult result = null;
            if (IsInEditingMode && isEditable)
            {
                if (contents.IsNotNullOrEmpty())
                {
                    attrs.Add("haschildren", "true");
                }
                result = MakeEditable(
                    field,
                    null, 
                    model,  
                    attrs,
                    _context, SitecoreContext.Database, writer);
              //  if (contents.IsNotNullOrEmpty())
              //  {
              //      sb.Append(contents);
              //  }
            }
            else
            {
                result = BeginRenderLink(
                        field.Compile().Invoke(model) as Fields.Link, attrs, contents, writer
                    );
            }
            result.Dispose();
            writer.Flush();
            writer.Close();
            return sb.ToString();
        }