静态变量获取参数
本文关键字:参数 获取 变量 静态 | 更新日期: 2023-09-27 18:36:59
我的asp网页上有这个代码(这是一个ID www.example.com/GestHC.aspx?pID=36006394 的url)
public partial class GestHC : WebPart
{
public GestHC ()
{
}
static int iIDHC;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
InitializeControl();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!this.Page.IsPostBack)
{
iIDHC = -1;
string str = this.Page.Request["pID"];
iIDHC = int.Parse(str.Replace("'", ""));
MyModel hc = MyModel.readdata(iIDHC);
this.txtName.text = hc.name
this.txtSurname.text = hc.surname
...
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
try
{
MyModel hc = new MyModel();
if (iIDHC != -1)
{
hc = MyModel.readdata(iIDHC);
}
else
{
hc.name = txtname.text;
hc.surname = txtSurname.text;
}
hc.dir1 = dir.text;
...
hc.savedata()
}
catch (Exception)
{
this.navegarAGridMensaje("Error");
}
}
}
问题是,当用户加载数据并保存数据时,一切正常,但是当超过 2 个用户或浏览器一起工作时,数据会混合在一起。例如:
User a creates:
ID = 10
Name = XXX
Age = 8
User b creates:
ID = 11
Name = YYY
Age = 10
然后,如果用户 a 更新了他的数据 (ID=10),也许将Age
设置为80
结果是
User a creates:
ID = 10
Name = XXX
Age = 8
User b creates:
ID = 11
Name = YYY
Age = 88
因此,(ID=11)已更新。调试..我可以看到使用静态 id,当第二个用户加载时,它可以读取前一个用户 iIDHC。
如何避免这个问题?
您可以改用会话对象 (https://msdn.microsoft.com/en-us/library/ms178581.aspx)。
当您将数据存储在静态变量中时,它将在应用的所有用户之间共享。
让它成为非静态的!
public partial class GestHC : WebPart
{
public GestHC ()
{
}
private int iIDHC = -1;//initialize here
...
}
此外,您不必在页面加载中初始化
protected void Page_Load(object sender, EventArgs e)
{
//iIDHC = -1; - not required as you can initialize it during declaration
}