Ste*_*ard 9 c# asp.net sitecore
我是Sitecore的新手.我创建了一个页面模板,并为General Link类型的URL添加了一个字段.我为链接的文本创建了另一个字段(这是此项目中的标准做法).
我只是想在我的用户控件中显示链接,但我不能让它工作.这应该很简单,但我会围成一圈
这是我试过的代码示例..
ascx:
<asp:HyperLink runat="server" ID="lnkMain"></asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
ascx.cs:
lnkMain.NavigateUrl = SiteCore.Context.Item.GetGeneralLink("Link1");
lnkMain.Text = item.GetFieldValue("Link1Text");
Run Code Online (Sandbox Code Playgroud)
jam*_*kam 31
您应该小心使用,linkField.Url因为它会错误地呈现Sitecore项目和媒体的内部链接.你应该使用Sitecore.Links.LinkManager.GetItemUrl(item)和Sitecore.Resources.Media.MediaManager.GetMediaUrl(item)那些.
根据链接类型,最好有一个帮助(扩展)方法为您返回正确的URL.看看这个Sitecore链接与LinkManager和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;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
Sitecore.Data.Fields.LinkField linkField = item.Fields["Link1"];
lnkMain.NavigateUrl = linkField.LinkUrl();
Run Code Online (Sandbox Code Playgroud)
当然最好使用<sc:FieldRender>控件,让Sitecore为你处理它,但看起来你没有那个选项.
小智 14
从Sitecore 7.2开始,有一个替代linkField.Url:
Sitecore.Data.Fields.LinkField linkField = item.Fields["Link1"];
lnkMain.NavigateUrl = linkfield.GetFriendlyUrl();
Run Code Online (Sandbox Code Playgroud)
引入了一个新的LinkField.GetFriendlyUrl()方法.无论字段包含哪种类型的链接,该方法都可以轻松输出有效的URL.对于内部链接,该方法从LinkManager.GetItemUrl()返回一个URL.对于媒体链接,该方法从MediaManager.GetMediaUrl()返回一个URL.对于外部链接,锚链接,电子邮件链接和JavaScript链接,该方法返回LinkField.Url属性的值.(400051)
http://techitpro.com/uncategorized/sitecore-7-2-changes/
如果使用Link控件会更容易:
<sc:Link Field="Link1" runat="server" ID="link">
<sc:Text Field="Link1Text" runat="server" ID="linkText" />
</sc:Link>
Run Code Online (Sandbox Code Playgroud)
这样,您不必执行任何代码隐藏的东西,您也可以使用页面编辑器.
| 归档时间: |
|
| 查看次数: |
37579 次 |
| 最近记录: |