2

この例外を回避するにはどうすればよいですか?

Dim imagepathlit As Literal = DownloadsRepeater.FindControl("imagepathlit")
        imagepathlit.Text = imagepath

以下がリピーターです。

<asp:Repeater ID="DownloadsRepeater" runat="server">

<HeaderTemplate>
<table width="70%">
<tr>
<td colspan="3"><h2>Files you can download</h2></td>
</tr>
</HeaderTemplate>

<ItemTemplate>
<tr>
<td width="5%">
<asp:Literal ID="imagepathlit" runat="server"></asp:Literal></td>
<td width="5%"></td>
<td>&nbsp;</td>
</tr>
</table>
</ItemTemplate>

</asp:Repeater>

リピーターのデータを取得するコードは次のとおりです。

c.Open()
        r = x.ExecuteReader
        While r.Read()
            If r("filename") Is DBNull.Value Then
                imagepath = String.Empty
            Else
                imagepath = "<img src=images/" & getimage(r("filename")) & " border=0 align=absmiddle>"
            End If

        End While
        c.Close()
        r.Close()
4

3 に答える 3

1

DownloadsRepeaterと呼ばれるコントロールにはコントロールが見つからないimagepathlitためimagepathlit、呼び出し後にコントロールは null になると思います。

は、コントロールの名前ではなく、 にControl.FindControl()基づいてコントロールを検索することに注意してください。IDしたがって、コレクション内のコントロールを見つけるには、アプリケーションの前半で次のようなものを用意する必要があります。

Dim imagepathlit As Literal = new Literal()
imagepathlit.ID = "imagepathlit"

アップデート

リピーターを使用しているため、子コントロールのレイアウトは少し異なります。Literalにfor eachItemのインスタンスを作成しますRepeater。したがって、コントロールの各インスタンスを取得するには、 をループして、ItemseachをRepeater呼び出す必要があります。FindControl()Item

For Each item As Item In DownloadsRepeater.Items
    Dim imagepathlit As Literal = item.FindControl("imagepathlit")
Next
于 2010-04-14T12:21:00.693 に答える
1

あなたが投稿したコードが実際に例外がスローされた場所であると仮定するとDownloadRepeater、ID を持つコントロールが含まれていないと思いますimagepathlit

を確認してくださいaspx

于 2010-04-14T12:21:53.927 に答える
1

コントロールは ItemTemplate 内にあるため、repeat.findcontrol は使用できません。itemtemplate は反復可能であるため、リピーターの項目をループしてコントロールを探す必要があります。したがって、次のように、それぞれをループしてコントロールを探す必要があります。

foreach (var item in repeater.Items)
{
   var control = item.FindControl("ID") as Type;
}

その構文を使用します。

于 2010-04-14T12:40:30.590 に答える