Partial postback with Javascript

前端 未结 3 1090
暗喜
暗喜 2020-12-15 06:11

I couldn\'t find something similar in SO.

In ASP.NET, is there any way that on cue I can cause a partial postback with Javascript in an UpdatePanel?
I tried

相关标签:
3条回答
  • 2020-12-15 06:56

    You can use an AsyncPostBackTrigger with the UpdatePanel to do this. Because you need something that can fire an event, using a button is fairly simple and when hidden works nicely.

    If this is your markup:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load">
        <ContentTemplate>
            <!-- Contents... -->
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Button ID="ReloadThePanel" runat="server" style="display:none;" />
    

    When you want the panel to be updated, you just need to call:

    __doPostBack('<%=ReloadThePanel.ClientID %>', null);
    

    This will make ASP.NET think that ReloadThePanel was clicked and the JavaScript auto-generated due to the trigger will handle the rest.

    EDIT

    You can do a pure JavaScript update of the UpdatePanel without any triggers or hidden buttons. You just need to invoke __doPostBack with the client-side ID as the first argument.

    __doPostBack('<%=UpdatePanel1.ClientID %>', null);
    
    0 讨论(0)
  • 2020-12-15 07:00

    The solution that worked for me

    ASPX

    <script>
      function myfunc(){
        __doPostBack('<%=UpdatePanel2.ClientID%>', "");
      }
    </script>
    
    <asp:UpdatePanel ID="UpdatePanel2" runat="server" OnLoad="UpdatePanel1_Load">       
    </asp:UpdatePanel>
    

    .cs

    protected void UpdatePanel1_Load(object sender, EventArgs e)
    {
       if (IsPostBack)
       {
          //your code
       }        
    }
    
    0 讨论(0)
  • I used @MatthewJacobs' answer but I found that the call to __doPostBack caused a runtime exception on IE11. I found that the call to __doPostBack can be replaced by the following JavaScript call, which worked on both browsers I tested (IE11 and Chrome 52).

    Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
        [ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null
    );
    

    See Sys.WebForms.PageRequestManager.beginAsyncPostBack Method for more details.

    0 讨论(0)
提交回复
热议问题