1

ユーザーコントロールをロードするカスタムコントロール(DLLとしてコンパイル)があります。(つまり、カスタムコントロールはLoadControlを実行します)ユーザーコントロールには、ボタンとテキストボックスがあります。ボタンのクリックイベントを接続します。

テキストボックスに値を入力します。ボタンをクリックすると、ページはポストバックを実行します。私のユーザーコントロールは、Page.IsPostBack = trueであるため、ポストバックが発生したことを認識しています。ただし、ボタンのクリックイベントが発生することはなく、テキストボックスにも入力した値が失われます。

何が起こっているのかについて誰かが考えていますか?

編集:私はこれについてテストを行い、SharePointを写真から取り出しました。再現できたので、SharePointへの参照をすべて削除しました。

4

4 に答える 4

1

ユーザーコントロールを動的にロードする場合は、.netプロセッサが送信イベントをどこに接続するかを知るために、ページのロード(ポストバックかどうか)ごとにユーザーコントロールをリロードする必要があります。

于 2009-03-25T16:34:00.670 に答える
1

ユーザー コントロールをロードする 1 つの方法は、CreateChildControl をオーバーライドし、base.CreateChildControls を呼び出してから、LoadControl メソッドを呼び出すことです。UserControl を特定の場所に配置する必要がある場合は、ページに PlaceHolder を配置し、コントロールをプレース ホルダー コントロール コレクションに追加します。

ユーザー コントロールをマークアップに直接追加することもできます。

コントロールを次のように登録します。

<%@ Register Src="~/path/ControlName.ascx" TagName="tagName" TagPrefix="myPrefix" %>

そして、次のように追加します。

<myPrefix:tagName ID="myId" runat="server"/>
于 2009-03-25T17:40:46.907 に答える
0

ポストバックのコントロールを再作成していないようです。ビューステートをロードするには、Page_Init中にコントロールを追加する必要があります。

于 2009-03-25T16:33:00.593 に答える
0

データバインドしている場合は、データバインド時に !Page.IsPostBack でのみ行っていることを確認する必要があります。ポストバックから「保存された」状態を消去します。

于 2009-03-25T16:11:30.023 に答える