使用Javascript进行部分回发

时间:2010-10-19 04:37:28

标签: javascript asp.net ajax postback

我在SO中找不到类似的东西。

在ASP.NET中,有没有什么方法可以在UpdatePanel中使用Javascript进行部分回发? 我试过了__doPostBack(),但它做了一个完整的回发 我可以用一个虚拟按钮欺骗它并点火click()然后处理部分回发,但我想要一种比欺骗更优雅的方式。

感谢。

编辑:我发现这个disturbedbuddha.wordpress.com/2007/11/26/ ...但我无法让它工作=(
我希望这种方法能够发挥作用;这对我来说很完美! 到目前为止,我使用最后一种方法可以做的是对定时器的增益参考。最初禁用计时器,启动计时器似乎不会导致回发。但是,如果没有Ajax,如果我只是最初启用了计时器,那么它会以一定的间隔发回,就好了;为什么Ajax调用不能导致它?

3 个答案:

答案 0 :(得分:33)

您可以将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认为单击了ReloadThePanel,并且由于触发器而自动生成的JavaScript将处理其余部分。

修改

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

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

答案 1 :(得分:2)

我使用了@ MatthewJacobs&#39;回答,但我发现对__doPostBack的调用在IE11上引起了运行时异常。我发现对__doPostBack的调用可以替换为以下JavaScript调用,该调用适用于我测试的两个浏览器(IE11和Chrome 52)。

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

有关详细信息,请参阅Sys.WebForms.PageRequestManager.beginAsyncPostBack Method

答案 2 :(得分:0)

对我有用的解决方案

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
   }        
}