1

私は、高度な操作のために多くのプロパティをUserControlカプセル化することを主な目的とした複合体を持っています。DropDownList

PreRender以前に設定されたプロパティに応じて、イベントでリストが作成されています。

protected void Page_PreRender(object sender, EventArgs e)
{
    sourceClient.SelectCommand = this.Property1 ? "exec a" : "exec b";
}

最も使用されるプロパティは ClientID です。

[Category("Settings")]
public int ClientID
{
   get
   {
      return Int32.Parse(DropDownList1.SelectedItem.Value);
   }
   set
   {
      DropDownList1.Items.FindByValue(value).Selected = true;
   }
}

Getter は通常、このコントロールを含むページでControlPameters呼び出されます。SqlDataSources

セッター - マークアップから: <uc:UserControl1 runat="server" ClientID='<%# Bind("ID") %>' />.

質問は次のとおりです。

Bindセッター fromが以前に呼び出されるのはなぜPreRenderですか? そしてDropDownList空で、アイテムの選択が機能しません! この動作を回避するにはどうすればよいですか?

Edit1:わかりました、そうではありませPreRenderInit。しかし、DropDownList1_DataBinding はまだプロパティ セッターの後に呼び出されています。

4

1 に答える 1

1

DataBinding は常に の前に発生しPreRenderます。ASP.Net ページのライフサイクルから:

DataBinding
このイベントは、含まれているコントロール (または Page オブジェクト) の PreRender イベントの前に、データ バインドされたコントロールによって発生し、データへのコントロールのバインドの開始をマークします。

必要に応じて、このイベントを使用してデータベース接続を手動で開きます。(多くの場合、データ ソース コントロールにより、これは不要になります。)

問題の解決策の 1 つDataBindingLoadPreRender. DropDownListこれにより、Bind 呼び出しがオフになったときに が利用可能であることが保証されます。

もう 1 つの解決策は、Bind 呼び出しを使用するのではなく、データソース自体への参照をコントロールに渡すことです。次に、適切なタイミングでバインディング自体をプログラムで処理できます。データソースにアクセスするDropDownListことで、 を読み込んで ID を取得できます。PreRender

于 2010-02-15T01:46:56.563 に答える