1

次の「FindControl」メソッドは、imgAd コントロールの検索に失敗します。理由はありますか?それを含むテーブルでしょうか?表の目的は、行を横切って列に並べることです。

<asp:Content ID="Content3" ContentPlaceHolderID="phPageContent" runat="Server">
    <asp:Repeater ID="repBanner" runat="server">
        <HeaderTemplate>
            <table>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <asp:Image ID="imgAd" runat="server" AlternateText="Panda Visa" ImageUrl="Images/AffiliateBanners/125%20by%20125.jpg" />
                </td>
                <td>
                    <asp:TextBox ID="txtHtml" runat="server" Columns="80" ReadOnly="True" Rows="7" TextMode="MultiLine"></asp:TextBox>
                </td>
                <td>
                     <asp:Button runat="server" Text="Copy HTML to Clipboard" OnClientClick="ClipBoard('txtHtml')" />
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>


Protected Sub repBanner_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles repBanner.ItemDataBound

    Dim CurrentAd As Ad = CType(e.Item.DataItem, Ad)
    Dim RepeaterItem As RepeaterItem = e.Item

    Dim imgAd As Image = CType(RepeaterItem.FindControl("imgAd"), Image)
    imgAd.ImageUrl = "Images/" & "125 by 125.jpg" '<<<Error occurs here

End Sub

Object reference not set to an instance of an object.

役立つと思われるデバッグ情報を次に示します。

? RepeaterItem.Controls.Count
1
? RepeaterItem.Controls(0).Controls.Count
0
? typename(RepeaterItem.Controls(0))
"LiteralControl"
4

1 に答える 1

1

e.Item.ItemTypeヘッダーやフッターではなく、アイテムを扱っていることを確認する必要があります。このようなもの:

Protected Sub repBanner_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles repBanner.ItemDataBound
    If (e.Item.ItemType <> ListItemType.Item AndAlso e.Item.ItemType <> ListItemType.AlternatingItem) Then
        Return
    End If

    Dim CurrentAd As Ad = CType(e.Item.DataItem, Ad)
    Dim RepeaterItem As RepeaterItem = e.Item

    Dim imgAd As Image = CType(RepeaterItem.FindControl("imgAd"), Image)
    imgAd.ImageUrl = "Images/" & "125 by 125.jpg" '<<<Error occurs here

End Sub
于 2010-07-29T20:03:19.500 に答える