我有一个三个嵌套转发器的结构来渲染一个标签,然后在这些标签下有一些按标题分组的项目。我一直在标准IEnumerable
类型上成功使用.NET 4.5中的强类型数据控件,但这是我第一次使用Dictionary<T1,T2>
。尽管如此,我已经看到另一个Stackoverflow question成功使用Dictionary
作为DataSource
,将ItemType
声明为KeyValuePair<T1, T2>
。
标记:
<asp:Repeater ID="rptTabs" runat="server"
ItemType="System.Collections.Generic.KeyValuePair<System.String, System.Collections.Generic.Dictionary<System.String, System.Collections.Generic.List<Sitecore.Data.Items.Item>>>">
<ItemTemplate>
<%# Item.Key %>
<%-- ... more repeaters under but they are commented out for now as it's the outer on that is failing --%>
</ItemTemplate>
</asp:Repeater>
代码隐藏:
var myDatasource = new Dictionary<string, Dictionary<string, List<Item>>>();
// add some items
rptTabs.DataSource = myDatasource;
rptTabs.DataBind();
这是我得到的异常/堆栈跟踪:
看起来好像无法构建页面,因为它无法通过string
名称解析ItemType。问题是,我在我的<%# Item.Key #%>
上得到intellisense,因此intellisense引擎可以通过字符串名称解析类型,但运行时不能?
注意:我怀疑Sitecore.Data.Items.Item
类型失败,因为我在IEnumerable中使用它之前意味着ItemType为Sitecore.Data.Items.Item
。
任何帮助将不胜感激!
答案 0 :(得分:0)
从我看到的ItemType属性不喜欢<
尖括号>
。我读过的答案表明,用各自的方括号替换所有尖括号似乎都有效。
替换以下内容:
<
与[
>
与]
所以你得到:
ItemType="System.Collections.Generic.KeyValuePair[System.String, System.Collections.Generic.Dictionary[System.String, System.Collections.Generic.List[Sitecore.Data.Items.Item]]]
我遇到了一个类似的错误。但是,就我而言,我发现我试图从<%# Item.Property %>
内访问HeaderTemplate
。