在我的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);
如果有人能给我一个更好的解决方案,我会很高兴。
答案 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;
因此,您在问题中建议(ContentReference
和IUrlResolver
的方式是正确的,但是我相信我有一个更好的解决方案,在某些情况下(当您有PageData
实例可用时) )可能会更简单:
EPiServer.Core.PageData
具有public virtual string LinkURL
属性。您可以使用此值并将其设置为您的Url
值:
block.Url = articlePage.LinkURL; //articlePage is instance of PageData
EpiServer将理解这是指向某些内容的内部链接,并将为内容设置适当的链接-因此,无论何时移动或重命名内容block.Url
仍将指向有效内容。