Как установить свойство 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
по-прежнему будет указывать на действительный контент.