2

ASP.NET 4.0 の使用

ここでは少し奇妙なコードです。私のコードは機能しますが、その理由がわかりません!

だから私は次のようなHTMLを持っています:

<asp:Repeater runat="server" ID="uxMyRepeater" ClientIDMode="Predictable">
    <ItemTemplate>
        <asp:Button runat="server" Text="Submit" />
        <asp:HiddenField runat="server" ID="uxIsVisibleHiddenField" Value="0" />
    </ItemTemplate>
</asp:Repeater>

そしてバックエンド:

Protected Sub uxMyRepeater_ItemCommand(source As Object, e As RepeaterCommandEventArgs) Handles uxMyRepeater.ItemCommand
    uxIsVisibleHiddenField.Value = "1"
End Sub

何らかの理由でこれが機能するため、通常は次のように uxMyRepeater_ItemCommand で uxIsVisibleHiddenField を宣言する必要があります。

Dim uxIsVisibleHiddenField As HiddenField = DirectCast(e.Item.FindControl("uxIsVisibleHiddenField"), HiddenField)

ただし、この特定のケースでは、宣言ステートメントがなくても機能します。なぜこれを行うのか、誰かが光を当てることができますか?

これはサンプル コードのみであり、実際のコードではないことに注意してください。

編集

各 RepeaterItem の周りに UpdatePanel があることを忘れていました。これを削除すると、Visual Studio でエラーが発生します。「uxIsVisibleHiddenField」は宣言されていません。保護レベルにより、アクセスできない場合があります。

4

3 に答える 3

1

これは、リピーターの外にある同じ ID を持つコントロールがある場合にのみ発生する可能性があります。リピーターは名前付けコンテナーであるため、ID の衝突はありません。

于 2013-05-07T12:07:16.173 に答える
0

ありますかAlternatingItemTemplate?その特定の領域で宣言され、気付かれないままになる可能性があります。

于 2013-05-08T09:54:15.270 に答える
0

多くのデバッグの後、私が言える唯一のことは、Repeater ItemTemplate 内に UpdatePanel がある場合、DataBind イベントでアクセスするときに ItemTemplate 内でコントロールを宣言する必要がないということです。非常に奇妙です。UpdatePanel を取り出すとコンパイラ エラーが発生するため、UpdatePanel は Repeater とコントロールの間で何らかの自動接続を行っている必要があります。

ご提案いただきありがとうございます。

于 2013-05-10T15:18:04.230 に答える