2014-01-06 3 views
6

Hallo ich lerne derzeit Sitecore 7 mit MVC4 und Glasmapper und ich habe einige Probleme mit dem allgemeinen Linkfeld. Ich kann nicht scheinen, die externen Verbindungen (nicht Verbindungen zu Einzelteilen) korrekt von einem allgemeinen linkfield auszugeben. Was mache ich falsch?Sitecore Glas Mapper allgemeiner Link in Mvc 4

Mein Modell:

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

} 

in der Ansicht:

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

Ausgang:

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

Vielen Dank im Voraus.

Antwort

7

Wurde das Modell automatisch generiert oder haben Sie es manuell erstellt? Welcher Typ ist Link, Glass.Mapper.Sc.Fields.Link? Wenn Sie also @socialLink.Url.Url benötigen, möchten Sie die Url-Eigenschaft aus dem Link-Feld namens Url.

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

wäre ich sehr versucht sein Class und Url Eigenschaften, um etwas anderes zu benennen, möglicherweise CssClass und SocialMediaUrl oder etwas, um nicht Verwirrung zu stiften.

+0

Die Das Modell wird manuell erstellt. Mit dem '.url' dahinter funktioniert es. Danke dafür und ich werde die Namen ändern, um Verwirrung zu vermeiden. Um dies weiter zu verbessern, wissen Sie, was die beste Möglichkeit ist, ein editierbares Linkfeld für den Seiteneditor zu erstellen? –

+0

@FilipHuysmans Sie sollten nur ein einzelnes LinkField verwenden, es gibt keine Notwendigkeit für 'Description' oder' Class', da Sie festlegen können, dass diese [in den Eigenschaften des Links eingestellt werden können] (http://i.imgur.com/) vSyCkLX.png). Dann können Sie das Feld [Editierbar in Glas] (http://glass.lu/docs/tutorial/sitecore/tutorial05/tutorial05.html) – jammykam

+0

Ich habe etwas anderes versucht: @RenderLink (socialLink, x => x .Url, new NameValueCollection {{"class", "connect" + socialLink.Class}}, true, Inhalt: socialLink.Description) Wenn isEditable jedoch auf true gesetzt ist, wird es nicht im Seiteneditor angezeigt. Das Feld ist nur unsichtbar, aber im normalen Modus funktioniert alles. Wenn ich den Inhaltsparameter lösche, funktioniert es im Seiteneditor. Irgendwelche Gedanken dazu? –

0

Damit Anker und querystrings unterstützt werden, ist es am besten link.BuildUrl((SafeDictionary<string>)null)

Es gibt zwei Link.BuildUrl() Methoden und ärgerlicherweise zu verwenden, sie beide Standardparameter haben (obwohl man als veraltet markiert). Sie werden, die man über eine typisierte Null angeben müssen, oder ...

Sie können eine Erweiterungsmethode hinzufügen, die Dinge einfacher

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

machen und in der HTML:

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