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

それを回避するための拡張メソッドを作成しました。ビューに使用されているものとは異なるモデル タイプを渡したい場合があるためではなく、
拡張したことに注意してください。GlassHtmlGlassView

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"))

IGlassHtmltoをキャストする必要があるため、まだ少しハックですGlassHtmlが、機能します。ビューに対して常に正しいモデルが定義されている場合 (したがって、モデル
パラメーター を指定する必要がない場合)、この拡張メソッドを に配置できます。GlassView

于 2014-06-26T08:21:03.713 に答える