我是 Sitecore 的新手。我创建了一个页面模板,并为“常规链接”类型的 URL 添加了一个字段。我为链接文本创建了另一个字段(这是该项目中的标准做法)。
我只是想在我的用户控件中显示链接,但我无法让它工作。这应该很简单,但我在兜圈子
这是我尝试过的代码示例..
ascx :
<asp:HyperLink runat="server" ID="lnkMain"></asp:HyperLink>
ascx.cs:
lnkMain.NavigateUrl = SiteCore.Context.Item.GetGeneralLink("Link1");
lnkMain.Text = item.GetFieldValue("Link1Text");
你应该小心使用linkField.Url
因为它会错误地呈现 Sitecore 项目和媒体的内部链接。你应该使用Sitecore.Links.LinkManager.GetItemUrl(item)
and Sitecore.Resources.Media.MediaManager.GetMediaUrl(item)
对于那些。
最好有一个帮助程序(扩展)方法根据链接类型为您返回正确的 url。看看这个Sitecore 与 LinkManager 和 MediaManager 链接 http://briancaos.wordpress.com/2012/08/24/sitecore-links-with-linkmanager-and-mediamanager/博客文章其中包含您所需的正确代码。
以供参考:
public static String LinkUrl(this Sitecore.Data.Fields.LinkField lf)
{
switch (lf.LinkType.ToLower())
{
case "internal":
// Use LinkMananger for internal links, if link is not empty
return lf.TargetItem != null ? Sitecore.Links.LinkManager.GetItemUrl(lf.TargetItem) : string.Empty;
case "media":
// Use MediaManager for media links, if link is not empty
return lf.TargetItem != null ? Sitecore.Resources.Media.MediaManager.GetMediaUrl(lf.TargetItem) : string.Empty;
case "external":
// Just return external links
return lf.Url;
case "anchor":
// Prefix anchor link with # if link if not empty
return !string.IsNullOrEmpty(lf.Anchor) ? "#" + lf.Anchor : string.Empty;
case "mailto":
// Just return mailto link
return lf.Url;
case "javascript":
// Just return javascript
return lf.Url;
default:
// Just please the compiler, this
// condition will never be met
return lf.Url;
}
}
Usage:
Sitecore.Data.Fields.LinkField linkField = item.Fields["Link1"];
lnkMain.NavigateUrl = linkField.LinkUrl();
当然最好使用<sc:FieldRender>
控制权并让 Sitecore 为您处理,但您似乎没有该选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)