【问题标题】:Change items in the LayoutTemplate of a nested ListView更改嵌套 ListView 的 LayoutTemplate 中的项目
【发布时间】:2011-01-12 19:18:06
【问题描述】:

这与我的earlier question 有关,但我想我会简化它并从中提出挑战。给定下面的代码,你能从后面的代码中更改“ChangeThisLabel”的值吗?

<asp:ListView ID="OuterListView" runat="server">
    <LayoutTemplate>
        <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
    </LayoutTemplate>
    <ItemTemplate>
        <%#Eval("outer_value")%> <br/>
        <asp:ListView ID="InnerListView" runat="server" DataSource='<%#Eval("inner") %>'>
            <LayoutTemplate>
                <asp:Label ID="ChangeThisLabel" runat="server" />
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
            </LayoutTemplate>
            <ItemTemplate>
                <%#Eval("inner_value")%> <br/>
            </ItemTemplate>
        </asp:ListView>
    </ItemTemplate>
</asp:ListView>

我建议在提交答案之前自己尝试一下,因为我在之前的帖子中得到了很多建议,这些建议对于单个 ListView 来说效果很好,但是在遇到嵌套的 ListView 时会掉下来。

【问题讨论】:

    标签: asp.net listview nested


    【解决方案1】:

    正如另一个答案中提到的那样。在后面的代码中,在加载时,您可以这样做:

    `OuterListView.FindControl("InnerListView").FindControl("ChangeThisLabel")
    

    然后将其转换为标签并更改文本。显然,您将在循环中迭代此代码,以便您为每个外部列表视图的内部列表视图中的每个标签执行此操作。

    关于您其他问题的答案,您并不清楚您是否想从后面的代码中访问它。此外,您可能想发布您尝试过的内容,以便人们知道您尝试过不同的方法。

    祝你好运!

    编辑:关于您的评论:

    除非我遗漏了什么,否则这将不起作用,因为“ChangeThisLabel”变成了“ctl00_ctl00_BodyContentPlaceHolder_ReportContentPlaceHolder _OuterListView_ctrl0_InnerListView_ChangeThisLabel" 当它被内部 ListView 渲染时

    你是对的,但是当你使用 FindControl(id) 时,它将使用服务器端 id 来查找控件。如果你这样做:InnerListView.FindControl("ChangeThisLabel") 那么无论分配给该控件的客户端 ID 是什么,它都会找到正确的标签。

    【讨论】:

    • 感谢您为我指明正确的方向。我的问题是我试图通过执行 OutListView.FindControl("InnerListView") 来找到 InnerListView,忘记了 InnerListView 存在于 OuterListView 中的每一行(项目)上,所以循环遍历项目集合让我到了那里。
    【解决方案2】:

    在您的 DataBound(或类似的)事件处理程序中,使用 FindControl("ChangeThisLabel") 来获取对标签的引用。当然,您应该在使用引用之前转换为Label

    您可能想要编写自己的 FindControl 方法,您将递归调用该方法以查找第 n 级的控件。

    【讨论】:

    • 除非我遗漏了什么,否则这将不起作用,因为“ChangeThisLabel”在由内部 ListView 呈现时变为“ctl00_ctl00_BodyContentPlaceHolder_ReportContentPlaceHolder_OuterListView_ctrl0_InnerListView_ChangeThisLabel”。
    • 我的错 - 我没有通过项目集合找到 InnerListView,这就是我没有运气的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2013-03-06
    • 2020-12-05
    • 2018-07-05
    相关资源
    最近更新 更多