0

我在这里尝试正确设置嵌套控件列表的数据源。

基本理念:

我有一个 asp:repeater 项目。里面有一个 DropDownList 和一个 BulletedList 加上一个 Button。

我想从中继器中的选定行中添加 DropDownList 中的选定项,以将其添加到选定行的 BulletedList 中。

到目前为止,我设法用 OnItemDataBound 和 OnClick 做到了这一点,这非常好。问题是事件 OnClick在OnItemDataBdound之后被触发。要查看我在 BulletedList 的数据源中添加的项目,我必须刷新页面。

我试过这个:

((BulletedList)src.FindControl("sharedPlanDomains")).Items.Clear();

接着

((BulletedList)src.FindControl("sharedPlanDomains")).Datasource = myobject;
((BulletedList)src.FindControl("sharedPlanDomains")).DataBind();

但它似乎不起作用。

((BulletedList)src.FindControl("sharedPlanDomains")).DomainsAssociated.ForEach(f => list.Items.Add(new ListItem { Text = f.Name }));

也不行。

有什么建议吗?

[编辑:澄清]

假设我有这个结构:

  • 托管计划:i-Perso
    域:[下拉列表] [按钮:关联]
    关联域:

    • google.com
    • google2.com
  • 托管计划:i-Mense 域:[下拉列表] [按钮:关联] 关联域:

    • google3.com

所以让我们举个例子,我点击第一个下拉列表并选择域 google4.com,然后 google4.com 将被添加到 i-Perso 行的项目符号列表的数据源中。

我在这里要做的是关联域和计划。如果它只是 1 - 1 的关系,但它是 1 - Multiple 的关系,我会做得更好。

4

1 回答 1

0

您可以将内部列表视图的数据源绑定到绑定到外部列表视图的项目的属性。但是,要做到这一点,内部 listview 将位于外部listview的项目模板中。

请参阅下面的代码并注意DataSource='<%# Eval("Labels_color") %>内部列表视图的 ' 属性。

<asp:ListView ID="ListView_Orp_Results" runat="server" ItemPlaceholderID="itemPlaceholder">
 <LayoutTemplate>
    <div id="outer_result_container">
        <div id="itemPlaceholder" />
    </div>
 </LayoutTemplate>
 <ItemTemplate>
     <div id="result_photo">...</div>
     <div id="result_category">...</div>
     <div id="result_detector">...</div>
     <div id="inner_result_container" runat="server">
         <asp:ListView ID="ListView_inner_results" runat="server" ItemPlaceholderID="itemPlaceholder" DataSource='<%# Eval("Labels_color") %>'>
            <LayoutTemplate>
                <div id="outer_result_container" runat="server" >
                    <div id="itemPlaceholder" runat="server"> </div>
                </div>
            </LayoutTemplate>
            <ItemTemplate>
                 <div id="inner_result_photo">...
                </div>
                <div id="inner_result_category">...
                </div>
                <div id="inner_result_categoryID">...
                </div>
            </ItemTemplate>
        </asp:ListView>
    </div>
     </div>
 </ItemTemplate>
</asp:ListView>

这样您就不需要从后面的代码中绑定嵌套的列表视图。只需绑定主列表视图,所有内部列表视图将自动绑定到绑定对象的 Labels_texture 属性

关于 runat="server" 它是 asp.net 控件的必需属性。基本上,这个属性意味着asp.net会解析标签并创建一个对应的对象。

大多数情况下,您不需要在html元素(div、p、...)上使用它,但在某些情况下,您可能希望它在后面的代码中操作相应的对象。

于 2014-11-14T07:14:46.247 回答