有条件地从更新面板内的链接按钮触发整页回发

时间:2010-11-29 23:10:33

标签: asp.net

如何从更新面板内的链接按钮有条件地触发整页回发?

我有一个自定义控件,其中包含自己的updatepanel,其中嵌入了一个链接按钮。当按下链接按钮时,我希望它的事件处理程序可以选择让控件更新正常或在页面上进行完整的回发。

以下是控件层次结构:

Page
  Custom Control
    UpdatePanel
      LinkButton

事件处理程序伪代码:

LinkButton Click Handler Begin
    If is a partial post back AND a full postback is needed
        Page.DoFullPostback 
    End If
End Handler

注意:我需要部分回发才能发生。我正在考虑在控件标记中注入一个__DoPostback,但这对我来说似乎很苛刻。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

抱歉,我不熟悉VB,所以我的示例源代码将用C#编写:

protected void btnLink_Click(object sender, EventArgs e)
{
    bool isAsync = ScriptManager.GetCurrent(Page).IsInAsyncPostBack;
    bool postBackIsNeeded = true;

    if (isAsync && postBackIsNeeded)
    {
        ScriptManager.GetCurrent(Page).RegisterPostBackControl(btnClick);
        string postback = Page.ClientScript.GetPostBackEventReference(
            btnClick, 
            string.Empty
        );
        ScriptManager.RegisterStartupScript(
            btnClick, 
            btnClick.GetType(), 
            "postback", 
            postback, 
            true
       );
}

}

主要想法是更改LinkButton控件的回发类型。如果需要,它应该在异步回发事件期间更改为完全回发而不是部分。在此之后,应该生成另一个回发脚本,并且应该在页面返回给客户端后立即执行。

最后一件事 - 在我的情况下使用循环检测条件(if (isAsync && postBackIsNeeded)),否则回发将是无限的。

答案 1 :(得分:1)

最简单的方法是在任何UpdatePanel之外的页面上的某个位置创建隐藏按钮。当您需要执行完整回发时,请使用JavaScript单击按钮或向其发出__doPostback()。您可以通过在UpdatePanel本身上调用__doPostback()或在其中的按钮上以编程方式在JavaScript中实现部分postpack。