如何以编程方式设置 EpiServer.Url 属性

How to set EpiServer.Url property programmatically

在我的 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);

如果有人能给我指出更好的解决方案,我会很高兴。

publich virtual ContentReference Url { get; set; }

或者如果您只需要页面:

publich virtual PageReference Url { get; set; }

由于 EpiServer.Url class 的制作方式(参见 public static implicit operator Url(string url) 实现),在代码中设置它的值的唯一方法是设置字符串值:

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

所以你在问题中建议的方式(ContentReferenceIUrlResolver)是正确的,但我相信我有更好的解决方案,在某些情况下(当你有 PageData实例可用)可能要简单得多:

EPiServer.Core.PageDatapublic virtual string LinkURL 属性。您可以使用此值并将其设置为您的 Url 值:

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

EpiServer 会理解这是某些内容的内部 link 并且会将适当的 link 设置为内容 - 因此无论何时您移动或重命名您的内容 block.Url 仍将指向有效内容。