0

私は次のケースを持っています:

updatepanel次のトリガーを使用します。

<Triggers>
<asp:AsyncPostBackTrigger ControlID="lbtn_addApp" EventName="Click" />
<asp:PostBackTrigger ControlID="btn_agree" />
<asp:PostBackTrigger ControlID="btn_disagree" />
</Triggers>

今、私はクリックイベントを発生させたいbtn_disagreeので、私はそうします:

    protected void btn_submit_Click(object sender, EventArgs e)
    {
       btn_disagree_Click(null, null);
    }

btn_submit更新パネルで

しかし、クリックイベントを呼び出すと、ポストバックになりません!!

btn_disagreeポストバック動作でイベントを呼び出す方法

4

2 に答える 2

1

はどこbtn_submitですか?

マークアップによると、クリックするとbtn_disagree標準のポストバックが発生するはずです。しかし、あなたのコードによれば、あなたはクリックしていませんbtn_disagreebtn_submitトリガーにリストされていないというものをクリックしています。

btn_submitも の一部であり、ポストバックも発生さUpdatePanelせたい場合btn_submitは、 を含める必要がありますPostBackTrigger。それ以外の場合は、 のデフォルトの動作を使用しUpdatePanel、サーバーを非同期的に呼び出します。

余談ですが、このコードには少しリファクタリングが必要です。

protected void btn_submit_Click(object sender, EventArgs e)
{
    btn_disagree_Click(null, null);
}

イベント ハンドラーを直接呼び出すことは避けてください。UI イベントに応答するためのものです。それらを直接呼び出す (およびnulls などを渡す) と、非常に厄介なエクスペリエンスになり、バグや奇妙な動作を要求するだけです。

このコードが意味することは、内部にbtn_disagree_Clickから使用する必要がある重要なビジネス ロジックがあることbtn_submit_Clickです。そのビジネス ロジックは、独自の別のメソッドにリファクタリングする必要があります。その後、2 つのイベント ハンドラは、お互いに呼び出そうとするのではなく、単にそのメソッドを呼び出すことができます。

ハンドラーが UI イベントを処理し、制御をビジネス ロジックに向けるだけにします。ビジネス ロジックを UI コードから分離します。

于 2012-05-27T12:38:45.417 に答える
0
 </ContentTemplate>
   <Triggers>  
   <asp:AsyncPostBackTrigger ControlID="Submit_But" EventName="click" />  
   </Triggers>  
   </asp:UpdatePanel>
于 2012-05-27T12:30:47.707 に答える