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

时间:2015-04-02 12:53:22

标签: url episerver episerver-7

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

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

2 个答案:

答案 0 :(得分:1)

publich virtual ContentReference Url { get; set; }

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

publich virtual PageReference Url { get; set; }

答案 1 :(得分: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仍将指向有效内容。