ASP.NET具有复杂ItemType失败的强类型DataControl(Repeater)

时间:2013-04-23 05:31:31

标签: c# asp.net repeater

我有一个三个嵌套转发器的结构来渲染一个标签,然后在这些标签下有一些按标题分组的项目。我一直在标准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();

这是我得到的异常/堆栈跟踪:Yellow Screen

看起来好像无法构建页面,因为它无法通过string名称解析ItemType。问题是,我在我的<%# Item.Key #%>上得到intellisense,因此intellisense引擎可以通过字符串名称解析类型,但运行时不能?

注意:我怀疑Sitecore.Data.Items.Item类型失败,因为我在IEnumerable中使用它之前意味着ItemType为Sitecore.Data.Items.Item

任何帮助将不胜感激!

1 个答案:

答案 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