今天我发布了一个小型的asp.net beta web应用程序,允许内部人员修改一些产品信息。我们开始遇到用户覆盖彼此产品信息的问题,即使每个工作人员正在编辑完全不同的行(产品)。
在谷歌搜索后,我想我知道发生了什么,它与使用静态变量有关,下面是一个很简单的例子:
// EditProductGroup.aspx.cs public partial class EditProductGroup : System.Web.UI.Page { private static int _groupId = 0; protected void Page_Load(object sender,EventArgs e) { _groupId = Convert.ToInt16(Request.QueryString["GroupID"]); // get existing ProductGroup information from database using //_groupId to find the row and populate textBoxes } private void saveProductGroupData() { // when user hits 'save changes' button,update row //where the primary key column 'ProductGroupID' matches _groupId in the table } }
所以,根据我的研究,整个应用程序实际上存在一个静态变量,这意味着如果多个用户正在使用应用程序,他们将有效地为“_groupId”读取相同的“值”,在某些情况下实际设置它以不同的值导致页面的另一个用户的实例将数据保存到错误的行(ProductGroupId)。
我的意图是静态变量与其他用户隔离,而不应该是 – 每个用户都有自己的页面实例,因此他们自己的“_groupId”变量的实例。
幸运的是,它们都是在一个开发者/分期数据库上而不是活的数据库。我不知道我是否只需要删除’static’关键字来停止所有人设置/读取的变量。
有什么想法吗?谢谢