1

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

如果有人可以为我指出一个更好的解决方案,我会很高兴。

4

2 回答 2

1
publich virtual ContentReference Url { get; set; }

或者,如果您只想要页面:

publich virtual PageReference Url { get; set; }
于 2015-04-02T18:08:18.590 回答
1

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

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

因此,您在问题中建议 (ContentReferenceIUrlResolver) 的方式是正确的,但我相信我有一个更好的解决方案,在某些情况下(当您有PageData可用的实例时)可能会更简单:

EPiServer.Core.PageData有财产public virtual string LinkURL。您可以使用此值并将其设置为您的Url值:

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

EpiServer 将理解这是指向某些内容的内部链接,并将设置正确的内容链接 - 因此,无论何时移动或重命名您的内容block.Url仍将指向有效内容。

于 2020-07-14T19:49:39.863 回答