0

这与我之前的问题有关,但我想我会简化它并从中提出挑战。给定下面的代码,您可以从后面的代码中更改“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 时会掉下来。

4

2 回答 2

3

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

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

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

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

祝你好运!

编辑:关于您的评论:

除非我遗漏了什么,否则这将不起作用,因为“ChangeThisLabel”在由内部 ListView 呈现时变为“ctl00_ctl00_BodyContentPlaceHolder_ReportContentPlaceHolder _OuterListView_ctrl0_InnerListView_ChangeThisLabel”

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

于 2008-12-23T21:46:15.503 回答
1

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

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

于 2008-12-23T21:29:58.407 回答