0

データオブジェクトを操作するための2つのコントロールを作成しました。1つは表示用、もう1つは編集用です。

1つのページで、「ビュー」をロードし、次のUserControlようにデータを渡します。

ViewControl control = (ViewControl)LoadControl("ViewControl.ascx");
control.dataToView = dataObject;
this.container.Controls.Add(control);

それはすべて問題なく、コントロール内でそのデータを取得して表示できます。

今、私は編集のために同様のアプローチに従おうとしています。これには別のユーザーコントロールがあり(編集用のテキストボックスがいくつかあります)、ビューの場合と同じ方法で元のデータを渡します。

EditControl control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);

これも問題なく動作します。

問題は、このデータを取得することです。ユーザーがボタンをクリックすると、編集されたデータを取得して処理する必要があります。何が起こっているのかというと、コントロールがプログラムで追加されているため、ユーザーが変更したデータにはどこからでもアクセスできないようです。

これに対する解決策はありますか?それとも、物事を分離し、場合によっては再利用できないようにするこの方法は不可能ですか?

前もって感謝します。

4

3 に答える 3

2

コントロールへの参照を、ページのコード ビハインド内の変数として保持するだけです。いえ

private EditControl control;

protected void Page_Init(object sender, EventArgs e)
{
   control = (EditControl)LoadControl("EditControl.ascx");
   control.dataToEdit = dataObject;
   this.container.Controls.Add(control);
}

protected void Button_Click(object sender, EventArgs e)
{
   var dataToEdit = control.dataToEdit; 
}

ページのライフサイクル (初期化) の右側の部分でコントロールを作成している限り、ViewState維持されます。私は dataToEdit が単なるものであると仮定してTextBoxいますか?

于 2010-05-18T12:03:16.890 に答える
0

これが私の解決策です:

このページでは、プログラムによって読み込まれたコントロールへの参照を保持しています。コントロールでは、ユーザーが入力したデータを含むオブジェクトを返す GetData() メソッドを作成しました。ユーザーがフォームを送信すると、ページはコントロールの GetData() メソッドを呼び出して、ユーザーが入力したデータにアクセスします。

于 2010-05-27T11:30:05.613 に答える
0

動的に作成されたコントロールは、ページに追加InitまたはPreInitイベントする必要があります。

コントロールの状態がまだ読み込まれていないため、ここで行う必要があります。コントロールを後で追加すると、ページのライフサイクルの早い段階でページがコントロールページの値をすでに埋めているため、それらは空になります。

ページのライフサイクルについて詳しくはこちら

于 2010-05-18T11:55:43.380 に答える