Как установить свойство EpiServer.Url программно

В моем типе BlockData у меня есть свойство типа EpiServer.Url

public virtual EpiServer.Url Url { get; set; }

Из EditMode я могу установить его для конкретного экземпляра PageData, но я не уверен, как установить его в коде, имеющем только ContentReference?

Заранее спасибо за помощь.

РЕДАКТИРОВАТЬ:

Я нашел один способ сделать это через:

var urlResolver = ServiceLocator.Current.GetInstance<UrlResolver>();
int contentReferenceId = 69;
ContentReference contentRef = new ContentReference(contentReferenceId);
block.Url = urlResolver.GetUrl(contentRef, language.Code);

Я был бы рад, если бы кто-то мог указать мне лучшее решение, если оно есть.

1 ответ

publich virtual ContentReference Url { get; set; }

Или, если вы хотите только страницы:

publich virtual PageReference Url { get; set; }

Из-за пути EpiServer.Url класс сделан (см. public static implicit operator Url(string url) реализация) единственный способ установить его значение в коде - установить строковое значение:

var url = "some url";
block.Url = url;

Итак, как вы предлагаете (ContentReference а также IUrlResolver) в вашем вопросе работает правильно, но я считаю, что у меня есть лучшее решение, которое в некоторых случаях (когда у вас PageData экземпляр доступен) может быть намного проще:

EPiServer.Core.PageData имеет public virtual string LinkURLсвойство. Вы можете использовать это значение и установить его как своеUrl ценность:

block.Url = articlePage.LinkURL; //articlePage is instance of PageData

EpiServer поймет, что это внутренняя ссылка на некоторый контент, и установит правильную ссылку на контент, поэтому всякий раз, когда вы перемещаете или переименовываете свой контент block.Url по-прежнему будет указывать на действительный контент.

Другие вопросы по тегам