ASP.NET Ajax ReorderList控件无法重新排序问题排查求助
问题排查:ASP.NET Ajax ReorderList 重排序失败
哦,这种没头没尾的错误真的能把人逼疯!我仔细看了你的代码和表结构,发现了一个非常容易漏掉的细节——你的SqlDataSource的UpdateCommand缺少了乐观并发检查的关键条件,这正是导致重排序失败的核心原因。
问题根源
你已经设置了OldValuesParameterFormatString="original_{0}",这意味着SqlDataSource会启用乐观并发模式:它要求在UpdateCommand中同时匹配原始的主键和原始的排序字段值,以此确保在你更新排序时,这条数据没有被其他操作修改过。但你的UpdateCommand里只用到了@original_ID,却没包含@original_Ordering,这就导致更新操作被系统判定为“不符合并发条件”,直接失败,却只抛出了那个毫无帮助的通用错误提示。
修复方案
修改你的SqlDataSource,更新UpdateCommand并添加对应的original_Ordering参数:
<asp:SqlDataSource ID="sdsActiveItems" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationConnectionString %>" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT ID, Name, Ordering FROM LOGREQItems WHERE Active = 1 AND FkGroup = 3 ORDER BY Ordering" UpdateCommand="UPDATE [LOGREQItems] SET Ordering = @Ordering WHERE ID = @original_ID AND Ordering = @original_Ordering"> <UpdateParameters> <asp:Parameter Name="Ordering" Type="Int32" /> <asp:Parameter Name="original_ID" Type="Int32" /> <asp:Parameter Name="original_Ordering" Type="Int32" /> </UpdateParameters> </asp:SqlDataSource>
额外检查点(以防万一)
- 确认
LOGREQItems表的Ordering字段确实允许更新(你的表结构里是int NOT NULL,只要数据库权限没问题就OK) - 给你的
DragHandleTemplate里的span加个明显样式,比如cursor: move; background: #ccc; padding: 2px 5px;,确保它能被正确识别为拖动手柄 - 可以在SqlDataSource的
Updated事件里加断点,查看e.AffectedRows的值,如果是0就说明并发检查没通过,能进一步验证我们的修复是否生效
内容的提问来源于stack exchange,提问作者P S
相关产品推荐
相关产品推荐

