You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:42:38