2014-01-06 2 views
6

Привет, я сейчас изучаю sitecore 7 с MVC4 и glassmapper, и у меня возникают некоторые проблемы с общим полем ссылок. Кажется, я не могу правильно вывести внешние ссылки (а не ссылки на элементы) из общего поля ссылок. Что я делаю не так?Siterore glass mapper общая ссылка в 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 из поля Link Url.

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

Я бы очень хотелось, чтобы переименовать Class и Url свойства чего-то еще, возможно, CssClass и SocialMediaUrl или что-то, чтобы не вызвать путаницу.

+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

Так что анкеры и Querystrings поддерживаются, то лучше использовать link.BuildUrl((SafeDictionary<string>)null)

Есть два Link.BuildUrl() методы и раздражающе, они оба имеют параметры по умолчанию (хотя один помечен как устаревший). Вам нужно будет указать, какой через типизированного нуль, или ...

Вы можете добавить метод расширения, который будет делать вещи проще

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