Asp.net mvc 4 MVC4中的Sitecore glass mapper通用链接

Asp.net mvc 4 MVC4中的Sitecore glass mapper通用链接,asp.net-mvc-4,sitecore,glass-mapper,Asp.net Mvc 4,Sitecore,Glass Mapper,您好,我目前正在学习使用MVC4和glassmapper的sitecore 7,我对general linkfield有一些问题。我似乎无法从常规链接字段正确输出外部链接(而不是项目链接)。我做错了什么 我的模型: [SitecoreType(TemplateId = "{F8168BAF-6916-47FE-BC7F-DE3B033CE233}")] public class SocialLink : AbstractBase { [SitecoreField] public

您好,我目前正在学习使用MVC4和glassmapper的sitecore 7,我对general linkfield有一些问题。我似乎无法从常规链接字段正确输出外部链接(而不是项目链接)。我做错了什么

我的模型:

[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>                
}
@foreach(Model.SocialFolder.Socials中的var socialLink)
{
}
输出:

<a href="Glass.Mapper.Sc.Fields.Link" class="connect slideshare">Read us on Slideshare</a>


提前感谢。

模型是自动生成的还是您手动创建的?什么类型的链接是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>                
}
@foreach(Model.SocialFolder.Socials中的var socialLink)
{
}

我很想将
Url
属性重命名为其他属性,可能是
CssClass
SocialMediaUrl
或其他不引起混淆的属性。

为了支持锚和查询字符串,最好使用
link.BuildUrl((安全字典)null)

有两个
Link.BuildUrl()
方法,令人烦恼的是,它们都有默认参数(尽管有一个标记为过时)。您将需要通过键入的null或

您可以添加一个扩展方法,使事情变得更简单

public static class GlassFieldExtensions
{
    public static string GetUrl(this Link link)
    {
        return link.BuildUrl(null as SafeDictionary<string>);
    }
}
公共静态类GlassFieldExtensions
{
公共静态字符串GetUrl(此链接)
{
返回link.BuildUrl(作为SafeDictionary为空);
}
}
在HTML中:

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

该模型是手动创建的。后面的“.url”正在工作。谢谢你,我会改变名字以避免混淆。为了进一步增强这一点,您知道为页面编辑器创建可编辑链接字段的最佳方法是什么吗?@FilipHuysmans您应该只使用一个链接字段,不需要
Description
Class
,因为您可以设置这些链接字段。然后您可以创建我尝试过的字段:@RenderLink(socialLink,x=>x.Url,new-NameValueCollection{{“class”,“connect”+socialLink.class}},true,contents:socialLink.Description),但是当isEditable设置为true时,它不会显示在页面编辑器中。该字段是不可见的,但在正常模式下,一切正常。当我删除contents参数时,它会在页面编辑器中工作。有什么想法吗?@FilipHuysmans Try你知道我如何使用不同的字段作为链接的描述吗。我只能将链接字段中的描述与@(可编辑(socialLink,x=>x.Url,new{@class=String.Format(“connect{0},socialLink.class)}))一起使用,不能将页面编辑器与@(RenderLink(socialLink,x=>x.Url,new NameValueCollection{{“class”,“connect”+socialLink.class},true,socialLink.description))一起使用)