您好我正在使用MVC4和glassmapper学习sitecore 7,而且我遇到了一般链接字段的一些问题。我似乎无法从一般链接字段正确输出外部链接(不是项目的链接)。我做错了什么?
我的模特:
[SitecoreType(TemplateId = "{F8168BAF-6916-47FE-BC7F-DE3B033CE233}")]
public class SocialLink : AbstractBase
{
[SitecoreField]
public virtual string Description { get; set; }
[SitecoreField]
public virtual string Class { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.GeneralLink)]
public virtual Link Url { get; set; }
}
在视图中:
@foreach (var socialLink in Model.SocialFolder.Socials)
{
<a href="@socialLink.Url" class="connect @socialLink.Class">@socialLink.Description</a>
}
输出:
<a href="Glass.Mapper.Sc.Fields.Link" class="connect slideshare">Read us on Slideshare</a>
提前致谢。
答案 0 :(得分:7)
是自动生成模型还是手动创建模型?什么类型的链接,Glass.Mapper.Sc.Fields.Link
?如果是这样,您需要@socialLink.Url.Url
,则需要名为Url。的链接字段中的Url属性。
@foreach (var socialLink in Model.SocialFolder.Socials)
{
<a href="@socialLink.Url.Url" class="connect @socialLink.Class">@socialLink.Description</a>
}
我很想将Class
和Url
属性重命名为其他内容,可能是CssClass
和SocialMediaUrl
或其他东西,以免造成混淆。
答案 1 :(得分:1)
为了支持Anchors和Querystrings,最好使用Link.BuildUrl()
有两种public static class GlassFieldExtensions
{
public static string GetUrl(this Link link)
{
return link.BuildUrl(null as SafeDictionary<string>);
}
}
方法,令人讨厌的是,它们都有默认参数(尽管一个标记为过时)。您需要通过键入的null指定哪一个,或者......
您可以添加一个更容易的扩展方法
@foreach (var socialLink in Model.SocialFolder.Socials)
{
<a href="@socialLink.GetUrl()" class="connect @socialLink.Class">@socialLink.Description</a>
}
在HTML中:
{{1}}