1

とイベントを使用したいネストされたUserControl(このコントロールは、MasterPage内のaspxページによって動的にロードされる別のコントロールによって動的にロードされます)があります。UserControlLinkButtonOnCommand

このボタンは一部のパネルに追加する必要があるためOnLoad、パネルのイベントに接続しました(ライフサイクルでイベントが発生する前に作成する必要があります):

protected void PatentAssignee_Load(object sender, EventArgs e) {
    Label label = (Label)sender;

    LinkButton link = new LinkButton();
    link.Text = name;
    link.Command += Link_OnCommand;
    link.CommandArgument = "argument";
    link.ID = "someID";

    label.Controls.Add(link)
}

protected void Link_OnCommand(object sender, CommandEventArgs e) {
    Response.Write(e.CommandArgument);
}

しかし、Link_OnCommandメソッドを呼び出すことができません。この問題に関連するもう1つのことは、UserControlがUpdatePanel内にあることです。また、リンクトリガーを完全なポストバックにしようとしました:

ScriptManager s = (ScriptManager)this.Page.Master.FindControl("__scriptManager");
s.RegisterPostBackControl(link);

...しかし、あまり変更はありません。ページは完全にリロードされますが、イベントは発生しません。

編集:コメントで要求されたように、ここにネストについての詳細があります:

MasterPage
  PlaceHolder
    Page
      UpdatePanel
        UserControl1
          FormView
            PlaceHolder
              UserControl2
                LinkButton

これは、UserControl2が動的にロードされることを意味します。

4

3 に答える 3

2

階層内のコントロールの 1 つに ID がありません。ID を設定すると、イベントが発生します。これは、AjaxControlToolkit にも大混乱を引き起こします (すべてのエクステンダーに ID があることを確認してください。そうしないと、クライアント側の動作の読み込みに失敗することがよくあります)。

于 2010-06-21T09:12:52.847 に答える
0

私もこの問題を抱えていたのを覚えています。本当の問題は見つかりませんでしたが、私がしたことは、aspx マークアップでイベントハンドラーを接続することでした。

ページ ライフ サイクルの初期段階でイベント ハンドラをフックすることもできます。

PreInit イベントハンドラを試してください。

ページ ライフ サイクルの詳細については、こちらをご覧ください。

于 2009-05-13T08:37:25.060 に答える
0

ajaxの場合、再利用可能なクラスを作成できると思います

public void registerUCAsyncPostBack(Page page, WebControl webcontrol, UserControl usercontrol){
            Control ControlAjaxNew = null;
            if (webcontrol.GetType() == typeof(LinkButton))
            {
                ControlAjaxNew = (LinkButton)usercontrol.FindControl(webcontrol.ID);
            }
            ScriptManager.GetCurrent(page).RegisterAsyncPostBackControl(ControlAjaxNew);
        }
于 2011-11-22T03:53:34.023 に答える