Описание ссылки Glass Mapper RenderLink — текст по умолчанию, если пусто

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

Мне нужен способ поймать это, когда редактор контента установил ссылку, но на самом деле не вставил описание ссылки. На данный момент он просто отображает пробелы. Вышеупомянутое работает, но это неуклюже, и мне нужно поместить его везде, где я использую RenderLink. Как сделать текст по умолчанию, если он пустой?


person PeterG    schedule 25.06.2014    source источник


Ответы (1)


Я создал метод расширения, чтобы обойти это.
Обратите внимание, что я расширил 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"))

Все еще немного хакерски, потому что вам нужно привести IGlassHtml к GlassHtml, но это работает.
Если у вас всегда есть правильная модель, определенная для вашего представления (и, следовательно, не нужно указывать модель параметр) вы можете поместить этот метод расширения в GlassView.

person Ruud van Falier    schedule 26.06.2014
comment
хорошее расширение, я мог бы добавить его в ядро ​​​​Glass, если это нормально. Вы также можете изменить это стекло GlassHtml на это IGlassHtml, и оно все равно должно работать. - person Michael Edwards; 26.06.2014
comment
Не стесняйтесь, добавляйте его, приятель - person Ruud van Falier; 26.06.2014