有没有办法获取Item的属性,就好像它是一个字段?我有一堆代码尝试在UserControls中推广Item行为...并获取用作字段名称的属性。例如,我有一个通用的DropDownList控件,它接受两个字符串,一个用于DataTextField,另一个用于DataValueField。但是当我想将项目NAME用作值时,这会崩溃:
string DataValueField = "SomeField";
string DataTextField = "Name";
ListItem x = new ListItem(myItem[DataTextField], myItem[DataValueField]); //OOOPS!
连连呢?除了编写真正的hacky代码,专门检查" Name"?因为我已经把它覆盖了。
答案 0 :(得分:1)
我认为如果没有反映,你可以轻易地访问它,正如你所说的那样,即使那样它也可能不那么干净。
我很想写一个简单的扩展方法来处理Fields集合中不可用的Sitecore属性:
public static string GetField(this Item item, string fieldName)
{
switch (fieldName)
{
case "Name":
return item.Name;
case "DisplayName":
return item.DisplayName;
default:
return item[fieldName];
}
}
然后是一个简单的例子:
string DataValueField = "SomeField";
string DataTextField = "Name";
ListItem x = new ListItem(myItem.GetField(DataTextField), myItem.GetField(DataValueField));
答案 1 :(得分:1)
你实际上可以(或者可以使用早期版本的Sitecore)!
我写了一篇关于如何获得特殊领域的blog post'几年前的价值观。
TL; DR
支持的特殊字段'是:
@id = Item.ID.ToString()
@key = Item.Key
@lang = Item.Language.ToString()
@mid = Item.BranchID.ToString()
@name = Item.Name
@tid = Item.TemplateID.ToString()
@ver = Item.Version.ToString()
示例:
Sitecore.Data.Items.Item item = Sitecore.Context.Database.GetItem("/sitecore/content");
string id = item["@id"];
string key = item["@key"];
string lang = item["@lang"];
string mid = item["@mid"];
string name = item["@name"];
string tid = item["@tid"];
string ver = item["@ver"];
Sitecore.Diagnostics.Assert.IsTrue(id == item.ID.ToString(), "No match");
Sitecore.Diagnostics.Assert.IsTrue(key == item.Key.ToString(), "No match");
Sitecore.Diagnostics.Assert.IsTrue(lang == item.Language.ToString(), "No match");
Sitecore.Diagnostics.Assert.IsTrue(mid == item.BranchId.ToString(), "No match");
Sitecore.Diagnostics.Assert.IsTrue(name == item.Name.ToString(), "No match");
Sitecore.Diagnostics.Assert.IsTrue(tid == item.TemplateID.ToString(), "No match");
Sitecore.Diagnostics.Assert.IsTrue(ver == item.Version.ToString(), "No match");
答案 2 :(得分:0)
绝对不能。您将不得不编写像jammykam建议的代码。 看一下数据库,您会看到Name是Items表中的一列,而Fields表中没有任何条目。
在此示例中,您会看到“显示名称”是一个字段。
欢呼声