我试图在后端C#代码的droplink中获取项目的显示名称。我正在使用Sitecore 6.6,而不是使用MVC,并且在CMS中为名为Address
的客户端设置了droplink控件。 droplink源转到/sitecore/Templates/User Defined/WAC/Address
,各个项目具有符合SEO的名称和可读的显示名称。
例如:
我的代码:
protected void Page_Load(object sender, EventArgs e)
{
String sl = "";
Sitecore.Data.Items.Item currentItem = Sitecore.Context.Item;
// BEGIN main class list
Sitecore.Collections.ChildList classList = currentItem.Children;
foreach (Sitecore.Data.Items.Item mainPage in classList)
{
if (mainPage.TemplateID.ToString() == "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}")
{
sl += "<span class=\"address\">" + mainPage.Fields["Address"] +"</span>";
}
else
{
}
}
// END main class list
classSessionList.Text = sl;
}
此代码将为我提供项目的ID。如果我使用mainPage.Fields["Address"].DisplayName
,我会得到&#34;地址&#34;。
如何从droplink获取项目的显示名称?
答案 0 :(得分:7)
使用 LookupField 获取以下参考项是示例代码:
LookupField address= (LookupField)mainPage.Fields["Address"];
Item addressItem = address.TargetItem;
string displayName = addressItem.Fields["DisplayName"].Value;
如果您想要一行,请使用以下代码:
((LookupField)mainPage.Fields["Address"]).TargetItem.DisplayName
答案 1 :(得分:2)
键入将字段强制转换为ReferenceField。然后访问TargetItem属性:
sl += "<span class=\"address\">" + ((ReferenceField)mainPage.Fields["Address"]).TargetItem.DisplayName +"</span>";
答案 2 :(得分:1)
托马斯的答案将根据您的代码而有效。但我建议你也要坚持使用ASP.Net和Sitecore服务器组件。
这样可以避免Null Reference错误,更好地支持页面编辑器,并使代码更易于维护。
你可以在你的标记中使用这样的转发器:
<asp:Repeater ID="rptAdresses" runat="server">
<ItemTemplate>
<span class="address">
<sc:Text id="scAddress" runat="server" Field="__Display Name" Item="<%#(Sitecore.Data.Items.Item)Container.DataItem%>"></sc:Text>
</span>
</ItemTemplate>
</asp:Repeater>
然后绑定代码后面的地址:
private void BindRepeater()
{
if (mainPage.TemplateID.ToString() != "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}")
{
rptAdresses.Visible = false;
}
else
{
rptAdresses.DataSource = Sitecore.Context.Item.GetChildren();
rptAdresses.DataBind();
}
}
我注意到的另一点是行mainPage.TemplateID.ToString() != "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}"
。这也是你可以改进的一点。硬编码ID不是一个好的实践。你可以创建一个类来保存这些东西,或者更好的是,你可以更多地考虑你的设计以避免它。
欢呼声
答案 3 :(得分:0)
所有其他解决方案都很完美,但您也可以使用以下代码:
var itemID=mainPage.Fields["Address"].value;
Item targetItem=Sitecore.Context.Database.GetItem(itemID);
if (mainPage.TemplateID.ToString() == "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}")
{
sl += "<span class=\"address\">" + targetItem.DisplayName +"</span>";
}
else
{
}
使用这种方法,您可以使用目标项目的每个字段。