我的项目模板包含General Link
的字段,并由以下类表示:
[SitecoreType]
public class MenuLink
{
[SitecoreField(FieldName = "Link")]
public virtual Link Link { get; set; }
}
现在我的链接字段包含外部和内部链接(指向其他项目的链接)。是否可以配置Glass Mapper Url
属性Link
包含绝对URL(如AlwaysIncludeServerUrl=true
)?这也用于网站解析(SiteResolving=true
)?
基本上我想给Link属性一个UrlOptions
配置。
我正在Sitecore 7.1
使用Glass.Mapper.Sc 3.1.2.18
。
答案 0 :(得分:7)
凯文
请下载版本3.1.6我已将UrlOptions属性添加到SitecoreFieldAttribute类。您应该能够像这样强制服务器路径:
[SitecoreField(UrlOptions=SitecoreInfoUrlOptions.AlwaysIncludeServerUrl)]
public virtual Link MyLink{get;set;}
您还可以通过管道标志添加其他选项:
[SitecoreField(UrlOptions=SitecoreInfoUrlOptions.AlwaysIncludeServerUrl|SitecoreInfoUrlOptions.LanguageEmbeddingNever)]
public virtual Link MyLink{get;set;}
答案 1 :(得分:4)
您是否尝试将SitecoreField属性替换为:
[Glass.Mapper.Sc.Configuration.Attributes.SitecoreInfo(Type=Glass.Mapper.Sc.Configuration.SitecoreInfoType.Url,UrlOptions= Glass.Mapper.Sc.Configuration.SitecoreInfoUrlOptions.AlwaysIncludeServerUrl)]
我还没试过,但值得一试。
更新:此方法无法正常使用,请参阅迈克尔solution。
答案 2 :(得分:3)
将此扩展方法添加到您的解决方案中:
using Sitecore;
using Sitecore.Links;
using Glass.Mapper.Sc.Fields;
public static class LinkExtensions
{
public static string GetLinkUrl(this Link link, ISitecoreContext sitecoreContext = null)
{
if (link != null)
{
if (link.Type == LinkType.External || link.Type == LinkType.Media)
{
return link.Url;
}
else if (link.Type == LinkType.Internal)
{
var target = (sitecoreContext ?? new SitecoreContext()).Database.GetItem(new ID(link.TargetId));
var urlOptions = Sitecore.Links.UrlOptions.DefaultOptions;
urlOptions.AlwaysIncludeServerUrl = true;
urlOptions.SiteResolving = true;
return LinkManager.GetItemUrl(target, urlOptions);
}
}
return string.Empty;
}
}
然后,假设你有这个模型:
[SitecoreType]
public class MenuLink
{
[SitecoreField(FieldName = "Link")]
public virtual Link Link { get; set; }
}
您可以像这样获取网址:
model.Link.GetLinkUrl();