【问题标题】:Bind a repeater based on Collection Position根据 Collection Position 绑定转发器
【发布时间】:2014-03-26 04:13:52
【问题描述】:

我在中继器中有一个中继器,我试图将子中继器与会话中的 Aka 列表绑定。

我的代码隐藏看起来像:

     var results = HttpContext.Current.Session["completeRecord"];

     var rep = (Repeater)e.Item.FindControl("rptAkas");

     var akaList = new List<string>();

     foreach (Entity list in (IEnumerable<Entity>) results)
     {
         akaList.AddRange(list.Aka);
     }
     rep.DataSource = akaList;
     rep.DataBind();

在我的孩子中继器中,我有以下内容:

    <asp:Repeater runat="server" ID="rptAkas" OnItemDataBound="repeater_OnItemDataBound">
      <ItemTemplate>
        <p><strong>Aka</strong><asp:Literal runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "akaList")  %>'></asp:Literal></p>
      </ItemTemplate>
    </asp:Repeater>

这会引发以下消息:

附加信息:DataBinding:“System.String”不包含名为“akaList”的属性。

如何将此列表绑定到中继器?

编辑

Container.DataItem 负责处理。

【问题讨论】:

  • 您的“实体”是否有一个名为“akaList”的列?
  • 我正在基于实体创建一个新列表,然后需要将该列表绑定到子中继器。
  • 您是否尝试将您的中继器绑定到 (IEnumerable) 结果?
  • 嗨,Shashank,我使用 Container.DataItem 让它工作,我只是想用更多数据尝试它,以确认它确实做了它应该做的事情

标签: c# asp.net


【解决方案1】:

Container.DataItem您的中继器正在迭代的当前项目。这不是字符串列表,而是单独的每个字符串。

用更伪代码的形式想想你在做什么:

foreach ( var a_single_string in Repeater.DataSource )
{
    var some_var = a_single_string.akaList;
}

当您引用Container.DataItem 时,它与上例中的寻址a_single_string 相同。

从长远来看,代码实际上并不适用,但我希望它能解释您收到错误的原因。您实际上是在要求 string 的属性“akaList”,因此会出现错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多