我创建了一个扩展方法来解决它。
请注意,我进行了扩展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
to 转换为GlassHtml
,但它可以工作。
如果您始终为您的视图定义了正确的模型(因此不需要指定模型参数),您可以将此扩展方法放在GlassView
.