代码之家  ›  专栏  ›  技术社区  ›  BeemerGuy

使用javascript进行部分回发

  •  16
  • BeemerGuy  · 技术社区  · 14 年前

    我找不到类似的东西。

    在ASP.NET中,有没有任何方法可以让我在updatepanel中使用javascript进行部分回发?
    我试过 __doPostBack() 但它做了一个完整的回发。
    我可以用一个假按钮和火来戏弄它 click() 然后用这种方式处理部分回发,但我想要一种比欺骗更优雅的方式。

    谢谢。

    编辑:我找到了这个 disturbedbuddha.wordpress.com/2007/11/26/
    我希望这种方法能奏效,它对我来说是完美的! 到目前为止,我使用最后一种方法可以做的是获得对计时器的引用。在计时器最初被禁用的情况下,启动计时器似乎不会导致回发。但是,如果没有Ajax,如果我最初只是启用了计时器,那么它会以很好的间隔发回消息;为什么Ajax调用不能引起这种情况?

    2 回复  |  直到 8 年前
        1
  •  33
  •   Matthew Jacobs    14 年前

    可以将AsyncPostBackTrigger与UpdatePanel一起使用来执行此操作。因为你需要一些可以触发事件的东西,使用一个按钮是相当简单的,当隐藏的很好地工作。

    如果这是您的标记:

    <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;" />
    

    当您希望更新面板时,只需致电:

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

    这将使ASP.NET认为已单击了重新加载面板,并且由触发器自动生成的javascript将处理其余部分。

    编辑

    您可以在不使用任何触发器或隐藏按钮的情况下对updatepanel进行纯javascript更新。你只需要调用 __doPostBack 以客户端ID作为第一个参数。

    __doPostBack('<%=UpdatePanel1.ClientID %>', null);
    
        2
  •  2
  •   Oktalist    8 年前

    我用了@matthewjacobs的答案,但我发现 __doPostBack γ-多普勒反馈 可以替换为以下javascript调用,它在我测试的两个浏览器(ie11和chrome 52)上都起作用。

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

    Sys.WebForms.PageRequestManager.beginAsyncPostBack Method 了解更多详细信息。