<li>@if (string.IsNullOrWhiteSpace(topLinks.Target.Text))
{
topLinks.Target.Text = "EMPTY DESCRIPTION";
}
@(RenderLink(topLinks, x => x.Target, isEditable: true))
</li>
我需要一种方法来在内容编辑器设置链接时捕获它,但实际上并没有放入链接描述。目前它只是渲染空格。上面的工作,但它很笨重,我需要把它放在我使用RenderLink
的任何地方。如果文本为空,如何默认文本?
答案 0 :(得分: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因为你需要将IGlassHtml
强制转换为GlassHtml
,但它确实有效。
如果您始终为视图定义了正确的模型(因此不需要指定模型参数),则可以将此扩展方法放在GlassView
上。