7

嗨,我目前正在使用 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>

提前致谢。

4

2 回答 2

7

模型是自动生成的还是您手动创建的?Link 是什么类型的Glass.Mapper.Sc.Fields.Link?如果需要@socialLink.Url.Url,则需要来自名为 Url 的 Link 字段的 Url 属性。

@foreach (var socialLink in Model.SocialFolder.Socials)
{
     <a href="@socialLink.Url.Url" class="connect @socialLink.Class">@socialLink.Description</a>                
}

我很想将ClassUrl属性重命名为其他东西,可能是CssClassSocialMediaUrl/或其他东西,以免引起混淆。

于 2014-01-06T15:27:58.820 回答
1

为了支持 Anchors 和 Querystrings,最好使用link.BuildUrl((SafeDictionary<string>)null)

有两种Link.BuildUrl()方法,令人讨厌的是,它们都有默认参数(尽管有一个被标记为已过时)。您将需要通过键入的 null 来指定哪一个,或者...

您可以添加一个扩展方法,这将使事情变得更容易

public static class GlassFieldExtensions
{
    public static string GetUrl(this Link link)
    {
        return link.BuildUrl(null as SafeDictionary<string>);
    }
}

在 HTML 中:

@foreach (var socialLink in Model.SocialFolder.Socials)
{
     <a href="@socialLink.GetUrl()" class="connect @socialLink.Class">@socialLink.Description</a>                
}
于 2017-06-06T16:25:23.800 回答