ASP.NET C#静态变量是全局的?
|
今天我发布了一个小型的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’关键字来停止所有人设置/读取的变量。 有什么想法吗?谢谢 解决方法是的,在ASP.NET中,静态字段的生命周期是针对应用程序域(请注意,这对于通用类型有所不同)。我建议使用服务器Session来存储要与客户端浏览器会话的实例(用户登录)关联的数据。 Session["_groupID"] = Convert.ToInt16(Request.QueryString["GroupID"]); 您可以通过以下方式检索它: short groupID = Convert.ToInt16(Session["_groupID"]); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 使用Razor的Html.EditFor限制文本框中字符的长度
- 如何刷新#include文件 – 它们在IIS7 / ASP.NET上进行缓存
- asp.net – 通过邮件发送wcf服务消费表单数据
- asp.net – 更改MVC帐户数据库中的DefaultConnection
- 如何在ASP.NET ListBox中设置多个选择?
- asp.net – 将linq连接到sql datacontext到业务层中的httpc
- Asp.Net Web API和WCF服务有什么区别?
- .net – 如何获得程序集最后修改日期?
- asp.net – 有没有办法知道是否有人为您的网站添加了书签?
- asp.net-mvc – 在MVC中的下拉列表选择上调用特定操作
- asp.net-web-api – 如何从Web API响应中删除标头
- asp.net – IIS 7.5中的URL重写会导致内部服务器
- 电子邮件 – 邮箱不可用,客户端没有权限作为此发
- asp.net – 你对Windows Workflow Foundation有什
- asp.net – 在ValidationSummary上动态显示boots
- asp.net – 查找应用程序根URL而不使用
- ASP.NET MVC – Ajaxified RenderAction
- asp.net-mvc – Url.RouteUrl返回null
- asp.net-mvc-3 – Razor语法中的ValidateRequest
- .net – SignalR长轮询在5秒内断开连接
