0

我在某些情况下遇到问题。我有一个中继器控件,里面有一个占位符(为了测试,我已经放置了一个 div 并尝试过)。我想在页面后面的代码中找到该占位符或 div,并将控件放入其中(目前,3 个文本框和 2 个按钮)

我对向占位符添加控件没有任何问题,我了解它是如何工作的,我在这里无法获得的是如何在这里找到这个动态控件。

这里有一些代码片段来帮助说明我正在尝试做的事情。

(ASP)

        <asp:Repeater id="rptSpecialNotes" runat="server">
        <ItemTemplate>
            <asp:UpdatePanel ID="udpSpecialNotesRepeater" runat="server">
                <ContentTemplate>
                    <asp:PlaceHolder ID="plhSpecialNotesRepeater" runat="server">
                    </asp:PlaceHolder>
                </ContentTemplate>
            </asp:UpdatePanel>
            <p><%# eval("subject") %></p>
            <div id="specialNotes" runat="server"></div>
            <asp:imagebutton runat="server" AlternateText="add Motion" ImageUrl="images/controls/Exclaim.png" width="40" height="40"></asp:imagebutton>
            <asp:imagebutton runat="server" AlternateText="add document" ImageUrl="images/controls/Documents.png" width="40" height="40"></asp:imagebutton>
            <asp:imagebutton runat="server" AlternateText="move up" ImageUrl="images/controls/Arrow-Up.png" width="40" height="40" CommandName="moveUp" CommandArgument='<%# Container.ItemIndex & "," &  eval("ItemID") %>'></asp:imagebutton>
            <asp:imagebutton runat="server" AlternateText="move down" ImageUrl="images/controls/Arrow-Down.png" width="40" height="40" CommandName="moveDown" CommandArgument='<%# Container.ItemIndex & "," &  eval("ItemID") %>'></asp:imagebutton>
            <asp:imagebutton runat="server" AlternateText="delete" ImageUrl="images/controls/Delete.png" width="40" height="40" CommandName="delete" CommandArgument='<%# Container.ItemIndex & "," &  eval("ItemID") %>'></asp:imagebutton>
            <asp:imagebutton runat="server" AlternateText="edit" ImageUrl="images/controls/Globe.png" width="40" height="40" CommandName="edit" CommandArgument='<%# Container.ItemIndex & "," &  eval("ItemID") %>'></asp:imagebutton>
        </ItemTemplate>
    </asp:Repeater>

图像按钮编辑,点击 rptSpecialNotes_Item 命令,该命令调用一个方法(编辑特殊注释),看起来像这样

    Dim commandArguments() As String = Split(e.CommandArgument, ",")
    Dim divId As String = commandArguments(0)
    Dim itemId As String = commandArguments(1)



    'determine action based on command name
    If e.CommandName = "edit" Then
        Call editSpecialNotes(itemId,divId)
    End If

和编辑特别说明是将东西放在给定的divID中。为了让它工作,我给了 divID 一个我知道存在的静态值 (rptSpecialNotes_plhSpecialNotesRepeater_1) 或类似程度的东西。但是,我总是得到一个空对象引用。

4

3 回答 3

1

用于FindControlrptSpecialNotes_Item事件处理程序中获取嵌套控件 - 这将返回控件:

sender.FindControl("specialNotes")

它将返回一个Control类型,因此如果您想使用该类型的特定属性和方法,则需要对正确的类型进行强制转换。

于 2012-08-01T20:01:51.837 回答
0

我不确定,但也许这有帮助:

<asp:imagebutton runat="server" AlternateText="edit" ImageUrl="images/controls/Globe.png" width="40" height="40" CommandName="edit" CommandArgument='<%# Container.ClientID & "," &  eval("ItemID") %>'></asp:imagebutton>

同样,对于 FindControl 方法,在 ItemDataBound 事件中;

Dim plh As PlaceHolder = e.Item.FindControl("YOURCONTROLID")
于 2012-08-01T20:18:20.627 回答
0

在 rptSpecialNotes_Item 命令事件处理程序中:

Dim plh As PlaceHolder = CType(e.Item.FindControl("plhSpecialNotesRepeater"), PlaceHolder)

plh.Controls.Add(lbl)
于 2012-08-01T20:46:58.467 回答