我的一个模板中有一个Droplist,其中填充了一些内容项.在Code Behind中,我想访问Droplist中的所选项目.我搜索了谷歌,但没有找到任何东西.
任何人都可以告诉我如何访问Droplist并在C#中获取其选定的项目?
答案并不像你想象的那么直截了当.Sitecore有两种字段类型,允许用户从项目列表中选择项目: Droplist和Droplink.
Droplist字段存储用户选择的项目的名称,但不存储对项目本身的引用.这仅适用于您具有令人难以置信的基本选择并且知道您永远不需要提供更多信息的情况.
Droplink字段存储用户选择的项目的ID,可以通过执行以下操作来访问:
public Item GetSelectedItemFromDroplinkField(Item item, string fieldName)
{
ReferenceField field = item.Fields[fieldName];
if (field == null || field.TargetItem == null)
{
return null;
}
return field.TargetItem;
}
Run Code Online (Sandbox Code Playgroud)
我的建议是将字段类型更改为Droplink,如果这是一个简单的更改,它将不会影响现有内容.如果您不能这样做,那么以下代码可能会帮助您:
public Item GetSelectedItemFromDroplistField(Item item, string fieldName)
{
Field field = item.Fields[fieldName];
if (field == null || string.IsNullOrEmpty(field.Value))
{
return null;
}
var fieldSource = field.Source ?? string.Empty;
var selectedItemPath = fieldSource.TrimEnd('/') + "/" + field.Value;
return item.Database.GetItem(selectedItemPath);
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理是获取所选项目的名称,并将其附加到source属性(您在模板上设置).它远非完美,但它沿着正确的路线,应该让你走在正确的轨道上.