2014-01-06 72 views
6

嗨,我目前正在學習與MVC4和glassmapper sitecore 7,我有一些問題與一般linkfield。我似乎無法從普通鏈接字段中正確輸出外部鏈接(不是項目鏈接)。我究竟做錯了什麼?Sitecore玻璃映射器Mvc中的一般鏈接4

我的模型:

[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> 

在此先感謝。

回答

7

模型是自動生成還是您手動創建它們?什麼類型是Link,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什麼的,以免造成混亂。

+0

的模型是手動創建的。在它後面的'.url'正在工作。感謝這一點,我會改變名稱,以阻止混亂。 爲了進一步加強這一點,你知道什麼是最好的方式來創建一個頁面編輯器的可編輯鏈接領域? –

+0

@FilipHuysmans你應該只使用一個LinkField,不需要'Description'或'Class',因爲你可以設置那些可以[在鏈接的屬性中設置](http://i.imgur.com/ vSyCkLX.png)。然後你可以創建該字段[編輯玻璃](http://glass.lu/docs/tutorial/sitecore/tutorial05/tutorial05.html) – jammykam

+0

我試過別的東西: @RenderLink(socialLink,x => x .Url,new NameValueCollection {{「class」,「connect」+ socialLink.Class}},true,contents:socialLink.Description) 但是,當isEditable設置爲true時,它不會顯示在頁面編輯器中。該領域是看不見的,但在正常模式下一切正常。當我刪除內容參數時,它在頁面編輯器中起作用。對此有何想法? –

0

使錨和查詢字符串的支持,這是最好使用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>     
} 
相關問題