Sitecore玻璃映射器在Mvc 4中的一般链接

时间:2014-01-06 13:28:46

标签: asp.net-mvc-4 sitecore glass-mapper

您好我正在使用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>

提前致谢。

2 个答案:

答案 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>                
}

我很想将ClassUrl属性重命名为其他内容,可能是CssClassSocialMediaUrl或其他东西,以免造成混淆。

答案 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}}