我在 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 时出现问题,但正如您从标记中看到的那样,我已经尝试删除这些并且没有区别)。