0

ユーザーコントロールにドロップダウンリストがあります

ユーザーが別の項目を選択したときに、ページ内のユーザー コントロールのドロップダウン リストの選択された値を取得するにはどうすればよいですか (自動ポストバックが true)?

Selected Index Changed イベント ハンドラーからパブリック メンバーに ddl の選択した値を格納しようとしました。ただし、このハンドラはコンテナ ページのページ読み込み後に実行されます。ユーザーコントロールの ddl で選択した値に基づいてページにデータをロードする必要があります。

ありがとう

ユーザーコントロールのコード

protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)

{

        _SelectedPageSize = Convert.ToInt32(ddlPageSize.SelectedValue);

}



int GetSelectedPageSize()

{

       return _SelectedPageSize;
}
4

1 に答える 1

1

探しているものを達成する方法はいくつかあります。1 つ目は、含まれているページでイベントの順序を変更するだけです。PageLoad イベントではなく PreRender イベントを使用すると、ドロップダウン選択アクションが完了し、情報がすぐに利用できるようになります。

おそらくより拡張可能な 2 番目の方法は、ページがリッスンして処理するユーザー コントロールからカスタム イベントを発生させることです。次に、情報がすぐに利用できる時点でアクションが直接実行されます。これにより、含まれている構造 (ページ、ユーザーコントロール、または同様のものであるかどうかにかかわらず) がイベントをサブスクライブし、必要なものを処理できます。

もう少し厳格な 3 番目の方法は、データが完了するとユーザーコントロールによって呼び出される関数を含むページに含めることです。これには、ユーザーコントロールが含まれる特定のページタイプを知っている必要があるため(拡張性が低くなります)、お勧めしません。

編集:カスタムイベントでオプション#2を実装するためのアイデアは次のとおりです。

public partial class MyUserControl: UserControl
{
    //All of your existing code goes in here somewhere

    //Declare an event that describes what happened. This is a delegate
    public event EventHandler PageSizeSelected;


    //Provide a method that properly raises the event
    protected virtual void OnPageSizeSelected(EventArgs e)
    {
        // Here, you use the "this" so it's your own control. You can also
        // customize the EventArgs to pass something you'd like.

        if (PageSizeSelected!= null)
            PageSizeSelected(this, e);
    }

    private void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
    {
        _SelectedPageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
        OnPageSizeSelected(EventArgs.Empty);
    }
}

次に、ページ コードでイベントをリッスンします。ページ読み込みのどこかに次を追加します。

myUserControlInstance.PageSizeSelected += MyHandinglingMethod;

次に、イベントを処理するメソッドを提供します。

protected void MyHandlingMethod(object sender, EventArgs e)
{
    // Do what you need to do here
}
于 2012-12-20T20:30:58.100 に答える