Glass Mapper RenderLink链接描述 - 默认文本,如果为空

时间:2014-06-25 15:51:01

标签: sitecore glass-mapper

<li>@if (string.IsNullOrWhiteSpace(topLinks.Target.Text))
    {
      topLinks.Target.Text = "EMPTY DESCRIPTION";
    }
    @(RenderLink(topLinks, x => x.Target, isEditable: true))
</li>

我需要一种方法来在内容编辑器设置链接时捕获它,但实际上并没有放入链接描述。目前它只是渲染空格。上面的工作,但它很笨重,我需要把它放在我使用RenderLink的任何地方。如果文本为空,如何默认文本?

1 个答案:

答案 0 :(得分:4)

我已经创建了一种扩展方法来解决它 请注意,我已延长GlassHtml而非GlassView,因为您可能希望传递与用于视图的模型不同的模型类型。

namespace ParTech.MvcDemo.Context.Extensions
{
    using System;
    using System.Linq.Expressions;
    using System.Web;
    using Glass.Mapper.Sc;
    using Glass.Mapper.Sc.Fields;

    public static class GlassHtmlExtensions
    {
        public static HtmlString RenderLinkWithDefaultText<T>(this GlassHtml glassHtml, T model, Expression<Func<T, object>> field, object attributes = null, bool isEditable = true, string defaultText = null)
        {
            var linkField = field.Compile().Invoke(model) as Link;

            if (linkField == null || string.IsNullOrEmpty(linkField.Text))
            {
                return new HtmlString(glassHtml.RenderLink(model, field, attributes, isEditable, defaultText));
            }

            return new HtmlString(glassHtml.RenderLink(model, field, attributes, isEditable));
        }
    }
}

您现在可以在视图中执行此操作:

@(((GlassHtml)this.GlassHtml).RenderLinkWithDefaultText(MyModel, x => x.LinkField, null, true, "Static default text"))

还有点hacky因为你需要将IGlassHtml强制转换为GlassHtml,但它确实有效。
如果您始终为视图定义了正确的模型(因此不需要指定模型参数),则可以将此扩展方法放在GlassView上。