【发布时间】:2013-05-04 04:09:24
【问题描述】:
我正在使用 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.net/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?
该页面仅适用于一个用户,该问题仅在多个用户同时进行更改时出现。
【问题讨论】:
标签: asp.net visual-studio-2010 gridview data-binding multiple-users