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

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

4

1 回答 1

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,因为您需要将IGlassHtmlto 转换为GlassHtml,但它可以工作。
如果您始终为您的视图定义了正确的模型(因此不需要指定模型参数),您可以将此扩展方法放在GlassView.

于 2014-06-26T08:21:03.713 回答