我正在使用 C#/ASP.NET 和 SQL 服务器数据库在 Visual Studio 2010 中工作。我正在尝试修复一个允许经理分配员工执行各种任务的网站。现在的问题是,如果两个经理同时工作,可能会分配错误的员工来执行任务。员工列表以网格视图表示。
问题似乎是因为其中一位用户正在查看网格视图中的旧数据。
假设第一个人加载列表并且 GridView 看起来像这样:
-员工 1
-员工 2
-员工 3
-员工 4
然后第二个人进来并分配给员工 2,这将员工 2 从列表中删除。实际列表现在如下所示:
-员工 1
-员工 3
-员工 4
但是第一个人仍然看到这个,因为他们的页面还没有更新:
-员工 1
-员工 2
-员工 3
-员工 4
然后,第一个人尝试将员工 3 分配给任务。他们仍然看到旧名单。当他们单击进行分配时,页面回发到服务器(显然在 gridview 控件中选择一行是服务器端事件,所以我不确定是否有办法绕过这个http://forums.asp。净/t/1706468.aspx/1)。页面重新加载并尝试执行回发事件,检查并看到控件尚未有效(因为数据绑定发生在回发事件应该被处理之后),所以我认为回发事件被延迟到数据绑定之后。(这里是页面加载上的事件顺序http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx)一旦 gridview 被数据绑定,数据就是最新的像这样:
-员工 1
-员工 3
-员工 4
然后可以处理回发事件。回发事件包含所选控件的行索引。第三行被选中,因此回发事件从网格中获取员工 4(现在在第三行)。然后,当我们想要员工 3 的唯一 ID 时,它使用该信息获取员工 4 的唯一 ID。在这种情况下,我们如何确保获得正确的员工 ID?
问题似乎是在数据绑定发生并更改网格之后应用了单击。我认为阻止页面进行回发是一件好事,但是gridview操作都是服务器端的,所以我认为我不能这样做。我不知道通过回发保留绑定数据的方法,因此每次我们回发时,我们都必须获取新的、可能不同的数据。我觉得我已经完成了大多数选项,你觉得我的推理有什么问题吗,或者对尝试新事物有什么建议吗?有没有办法在页面发回之前获取员工 ID?
该页面仅适用于一个用户,仅当多个用户同时进行更改时才会出现问题。