AJAX.NET __doPostBack更改其他内容

时间:2010-05-26 14:56:04

标签: asp.net ajax updatepanel

我有一个应用程序,其中javascript读取设备的GPS位置并将其发送到服务器端脚本,如下所示:

f()
{
  var initialLocation= Someshit();
  document.getElementById('<% = text.ClientID %>').value=initialLocation;
  var button = document.getElementById('<% = Button4.ClientID %>');
  button.click();
}

我有一些AJAX.NET代码:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
       <asp:Button ID="Button4" runat="server" Text="PlaceHolder" onclick="Button4_Click"/>
       <asp:TextBox ID="text" runat="server"></asp:TextBox>
    </ContentTemplate>
</asp:UpdatePanel>

进一步下来

<asp:UpdatePanel ID="UpdatePanel2" runat="server">
   <ContentTemplate>
      <div>
          <some divs and asp:gridviews and god knows what >
      </div>
    <ContentTemplate>
</asp:UpdatePanel>

问题是当UpdatePanel1的事件结束时,最后一个div内部内容会发生变化。这是为什么?我不想在UpdatePanel1正在执行其操作时更改UpdatePanel1之外的内容。请帮忙。

1 个答案:

答案 0 :(得分:1)

默认UpdateModeAlways,在这种情况下您需要Conditional,如下所示:

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
   <ContentTemplate>
      <div>
          Yadda yadda
      </div>
    <ContentTemplate>
</asp:UpdatePanel>

From MSDN,区别在于:

  • 始终 - 针对源自该页面的所有回发更新UpdatePanel控件的内容。这包括异步回发。

  • 条件 - UpdatePanel控件的内容在以下条件下更新:

    • 如果显式调用UpdatePanel控件的Update方法。
    • 如果通过使用UpdatePanel控件的Triggers属性将控件定义为触发器并导致回发。在此方案中,控件是更新面板内容的显式触发器。触发器控件可以位于定义触发器的UpdatePanel控件的内部或外部。
    • 如果ChildrenAsTriggers property设置为true,则UpdatePanel控件的子控件会导致回发。在此方案中,UpdatePanel控件的子控件是用于更新面板的隐式触发器。嵌套的UpdatePanel控件的子控件不会导致更新外部UpdatePanel控件,除非它们被明确定义为触发器。