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