开发者

Conditionally trigger a full page postback from a link button inside an update panel

How do I conditionally trigger a full page postback from a link button inside of an update panel?

I have a custom control that contains its own updatepanel with a link button nested inside of it. When the link button is pressed I want its event handler to have the option of either letting the control update as normal or doing a full postback on the page.

Here is the control hierarchy:

Page
  Custom Control
    UpdatePanel
      LinkButton
开发者_开发问答

Event handler Pseudo code:

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

Note: I aways need the partial postback to happen. I was considering injecting a __DoPostback in the controls markup but this seems hacky to me.

Thanks for your help!


Sorry, I'm not familiar with the VB, so my example source will be written in 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
       );
}

}

The main idea is to change the type of postback of your LinkButton control. If neccessary it should be changed to full postback instead of partial during the async postback event. Right after this, another postback script should be generated and it should be executed as soon as the page will be returned to client.

And the last thing - use loop detection condition (if (isAsync && postBackIsNeeded) in my case) otherwise postback will be infinite.


The easiest approach is to create a hidden button somewhere on your page, outside of any UpdatePanels. When you need to do a full postback, use JavaScript to either click the button or issue __doPostback() to it. You can achieve a partial postpack programmatically in JavaScript by calling __doPostback() on an UpdatePanel itself, or to a button inside one.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜