3

.ascx ファイルはページ ライフ サイクルの早い段階で自然にレンダリングされるため、.ascx 部分の外部にあるフォームの情報を更新する場合、たとえばボタン クリック (情報を保存するのと同じもの)?

たとえば(疑似コード):

Sub Page_load
    'user control is naturally rendered here'
End Sub

Sub Button_Click
    SaveStuff()
    ReRenderUserControl()
End Sub
4

3 に答える 3

4

保存されたデータに基づいて構築されているユーザー コントロールを作成している場合。あなたができることは、その構築を行うメソッドを作成し、それをページとユーザー コントロール (疑似コード) 内で呼び出すことです。

ユーザーコントロール:

protected Page_Load(object sender, EventArgs e)
{
    BuildControlBasedOnData();
}

public BuildControlBasedOnData()
{
    // Build the user control based on saved data
} 

呼び出しページ:

Button_Click(object sender, EventArgs e)
{
    UserControl1.BuildControlBasedOnData();    
}
于 2009-08-24T19:52:52.917 に答える
3

あなたが言及したように、ユーザーコントロール(.ascxファイル)は、含まれているページのライフサイクル中にレンダリングされます。含まれているページでボタン クリック ポストバックを実行すると、ポストバック ロード時にユーザー コントロールが完全に再レンダリングされます。このロード時にユーザー コントロールに異なる情報を含める必要がある場合は、多くのことができます。

  • ユーザー コントロールで、データ ストアに移動し、ロード イベントまたはその他の適切なイベント (コントロールのデータバインドなど) 中に必要な情報を返します。
  • 含まれているページのページ ロードで、ユーザー コントロールのさまざまな側面で使用するユーザー コントロールのプロパティに値を割り当てます。これらの値は、データ ストアやクエリ文字列などから取得できます。

他にもたくさんのオプションがあります。部分的なポストバックや AJAXy タイプのものについて話している場合は、おそらく JavaScript を使用してユーザー コントロールのさまざまな部分を更新する必要があります (UpdatePanels を使用している場合を除きます。これらは悪魔であるため使用すべきではありません)。 .

于 2009-08-24T19:42:24.530 に答える
2

私は、不完全ではあるが使用可能なソリューションであると信じているものを思いつきました。私がしたことはPage_Load、.ascx ファイルPublicで関数を作成し、情報が保存された後に呼び出すことだけでした。これで私の問題は解決しました。

誰かがよりエレガントなソリューションを持っている場合は、私に知らせてください!

于 2009-08-24T19:53:26.207 に答える