1

我在 VS2012 中有一个针对 ASP.NET 4.5 构建的 ASP.NET Web 应用程序。在应用程序中有许多包含 ListView 控件的表单,这些控件又包含 UpdatePanel 控件,因此发生的任何编辑或添加的新数据都是异步执行的,并且在用户刷新页面时不会重复。

直到今天,这一切都很好。今天,我使用 NuGet 将最新版本的 AjaxControlToolkit (7.0123) 添加到项目中,并对脚本等进行了修改,如 Stephen Walther 在此处指定的

自从将 AjaxControlToolkit 引入项目以来,异步回发似乎已经变得同步。例如,如果我在 ListView 中编辑一个项目,当我按下 F5(在 IE 或 Firefox 中)时,系统会提示我将重新发送数据。

标记很简单...

<asp:ListView ID="LocationList" runat="server" ItemType="Model.Location" DataKeyNames="ID" InsertItemPosition="LastItem" DeleteMethod="LocationList_DeleteMethod" InsertMethod="LocationList_InsertMethod" SelectMethod="LocationList_SelectMethod" UpdateMethod="LocationList_UpdateMethod">
  <LayoutTemplate>
    <asp:UpdatePanel ID="ListViewUpdatePanel" runat="server">
      <ContentTemplate>
        <table class="table table-condensed table-striped">
          <thead>
            <tr>
              <th runat="server">
                <asp:LinkButton ID="SortByDescription" runat="server" CommandName="Sort" CommandArgument="Name" Text="Description" />
              </th>
              <th></th>
            </tr>
          </thead>
          <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
        </table>
      </ContentTemplate>
    </asp:UpdatePanel>
    <div class="pagination align-center">
      <asp:DataPager runat="server" />
    </div>
  </LayoutTemplate>
  <ItemTemplate>
    <tr>
      <td>
        <%#: Item.Name %>
      </td>
      <td>
        <asp:LinkButton ID="Edit" runat="server" CommandName="<%#: Global.CommandNames.Edit %>" CommandArgument="<%#: Item.ID %>" Text="Edit" />
      </td>
    </tr>
  </ItemTemplate>
  <EditItemTemplate>
    <tr>
      <td>
        <asp:TextBox ID="Description" runat="server" Text="<%#: BindItem.Name %>" />
      </td>
      <td>
        <asp:LinkButton ID="Update" runat="server" CommandName="<%#: Global.CommandNames.Update %>" Text="Update" />
        <asp:LinkButton ID="Cancel" runat="server" CommandName="<%#: Global.CommandNames.Cancel %>" Text="Cancel" />
      </td>
    </tr>
  </EditItemTemplate>
  <InsertItemTemplate>
    <tr>
      <td>
        <asp:TextBox ID="Description" runat="server" Text="<%#: BindItem.Name %>" />
      </td>
      <td>
        <asp:LinkButton ID="Insert" runat="server" CommandName="<%#: Global.CommandNames.Insert %>" Text="Add" />
      </td>
    </tr>
  </InsertItemTemplate>
</asp:ListView>

提供的标记位于 ContentPanel 中,页面使用 MasterPage。MasterPage 具有上面概述的 ToolkitScriptManager 控件。

正如我已经说过的,这在安装 AjaxControlToolkit 之前运行良好。

我还尝试更改页面布局,就像将 UpdatePanel 移到整个 ListView 之外(然后将寻呼机放在 UpdatePanel 下);这没什么区别。

除了涉及 AjaxControlToolkit 的一些兼容性和/或配置问题之外,我完全不知道是什么原因造成的。我找到了对类似问题的其他参考,但我还没有找到任何有效的解决方案(例如,有文章指出使用静态客户端 ID 时出现问题,但正如您从标记中看到的那样,我已经尝试删除这些并且没有区别)。

4

0 回答 0