0

クリック ボタン イベントで、ASP ページに複数のコントロールをロードするために、.ascx ファイルでカスタム コントロールを使用しようとしています。

ここに私の .ascx ファイルがあります:

<%@ Control Language="VB" ClassName="CHelloWorld" %>
<script runat="server">
</script>

<asp:Panel ID="panel" runat="server">
    hello world!
</asp:Panel>

ここで、ボタンを含む .aspx ファイルと、ボタンをクリックするたびにコントロールを追加するパネルを作成します。

<asp:Panel runat="server" id="panelcontrols">
</asp:Panel>
<asp:Button id="myButton" OnClick="OnClickButton" Text="Add" />

そして、ここにクリックイベントのある私の.vbファイルがあります:

Sub OnClickButton(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myControl As Control
    myControl  = LoadControl("myfile.ascx")
    panelcontrols.Controls.Add(myControl  )
End Sub

この実装では、初めてクリックすると、「Hello World!」と表示されます。私のページでは、しかし、2回目、3回目をクリックすると...変化はありません!

.ascx から 1 つのコントロールしかロードできないからですか?

単一の .ascx ファイルから複数のコントロールを作成するにはどうすればよいですか?

ありがとう。

[編集]

OK、今は WiewState を使用して、既に作成されたコントロールを記憶しています。ありがとう。

しかし、私は質問があります:

私の.aspxファイルは、@Pageディレクティブの次の行で.vbファイル(OnClickButtonを定義した場所)のコードを使用します:Src="[path]/myscript.vb

しかし、この .vb ファイルでは、CHelloWorld コントロール タイプを使用してコントロール プロパティを変更する方法がわかりません。

このコードを使用しても機能しません:

Sub OnClickButton(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myControl As CHelloWorld
    myControl  = LoadControl("myfile.ascx")
    panelcontrols.Controls.Add(myControl  )
End Sub

「CHelloWorld」が定義されていないと言って失敗します!

どのようにできるのか ?

4

2 に答える 2

1

いいえ、コントロールを動的に追加しているためです。ページが読み込まれるたびに、追加されたコントロールが失われるため、毎回追加する必要があります (したがって、ポストバック間で追加したものを「記憶」する方法があります)。

于 2012-11-23T08:33:19.580 に答える
0

ViewState が役に立ってよかったです。

次の問題ですが、正しい名前空間を取得していますか? (別の質問でこれを尋ねる価値があるかもしれません)

于 2012-11-25T04:00:28.730 に答える