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在更新面板中

但是当我调用点击事件时,它不会生成 postbak !

我如何用回发行为调用btn_disagree事件

4

2 回答 2

1

在哪里btn_submit

根据您的标记,单击btn_disagree应该会导致标准回发。但是根据您的代码,您没有单击btn_disagree. 您正在单击btn_submit未在触发器中列出的名为 的内容。

如果btn_submit也是 the 的一部分,UpdatePanel并且您还想btn_submit引起回发,则需要PostBackTrigger为它包含一个。否则它将使用 an 的默认行为UpdatePanel并异步调用服务器。

顺便说一句,这段代码需要一点重构:

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

您应该避免直接调用事件处理程序。它们旨在响应 UI 事件。直接调用它们(并传递nulls 等)会带来非常混乱的体验,并且只是在询问错误和奇怪的行为。

这段代码对我的暗示是,其中有重要的业务逻辑btn_disagree_Click需要从btn_submit_Click. 该业务逻辑应该完全重构为另一种方法。然后两个事件处理程序可以简单地调用该方法,而不是尝试相互调用。

让处理程序只处理 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 回答