静态变量获取参数

本文关键字:参数 获取 变量 静态 | 更新日期: 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
}