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