在我的.NET Web表单页面中,我有一个ListBox和一些允许我对项目进行排序的jQuery。我选择几个项目然后循环它们以保存到我的数据库。我想保存项目排序的顺序,但是,我无法让它工作。我的代码隐藏显示:
protected void session_DetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
panel_SqlDataSource.Delete();
ListBox panel_ListBox = session_DetailsView.FindControl("panel_ListBox") as ListBox;
int so = 0;
for (int i=0; i < panel_ListBox.Items.Count; i++)
{
if (panel_ListBox.Items[i].Selected == true)
{
so++;
panel_SqlDataSource.InsertParameters["presenterID"].DefaultValue = panel_ListBox.Items[i].Value;
panel_SqlDataSource.InsertParameters["sortOrder"].DefaultValue = so.ToString();
panel_SqlDataSource.Insert();
}
}
}
答案 0 :(得分:0)
是的,所以你的订单在客户端被更改可能不会影响它在服务器上的顺序,因为它可能会在viewstate中的某处定义。您的控件将在最初显示时返回。你需要以某种方式跟踪事物的顺序 - 将其从形式变量或其他任何东西中拉出来。
答案 1 :(得分:0)
ASP .Net不知道ListBox中的项目已在客户端更改。您可能正在使用jQuery.sortable方法对列表框项进行排序。您需要使用“serialize”选项调用sortable并将值保存到隐藏字段中。当您发布表单时,您会读取该隐藏字段的值并将新订单保存在数据库中。
因此,对于带有id 1,2,3的对象具有新订单2,3,1的示例,然后创建如下所示的更新/插入方法:
update tbl set sortOrder = 1 where presenterId = 2
update tbl set sortOrder = 2 where presenterId = 3
update tbl set sortOrder = 3 where presenterId = 1