如何避免在单击按钮后实例化变量

本文关键字:实例化 变量 按钮 单击 何避免 | 更新日期: 2023-09-27 18:23:42

我正在运行一个Sql查询,每次单击按钮时,where子句都会更改。

现在where子句由列表的索引组成。当单击按钮时,会发生页面加载,从而导致索引值初始化。

int i=0;
protected void Button1_Click(object sender, EventArgs e)
{    
    string str = lst1.ElementAt<string>(i++);
    qr = "Select BdId,First_Name,Last_Name,Age,Gender,Relationship_status,Birthday from [User] where BdId='" + str + "'";
    da2 = new SqlDataAdapter(qr, con);
    da2.Fill(ds2);
    Label1.Text = Label1.Text + "  " + i.ToString();
}

我该如何避免这种情况的发生?我希望索引值是全局的,这样它就不会在每次单击按钮时再次实例化。

感谢

如何避免在单击按钮后实例化变量

每次有页面请求时,都会创建该页面类的实例来处理该请求。因此,任何字段都会被重新初始化。

您可以在ViewState中存储一个值,以便在各种请求中记住一个值:

private int TheIndex
{
   set { ViewState["TheIndex"] = value; }
   get 
   {
      if (ViewState["TheIndex"] == null)
         return 0;
      return (int)ViewState["TheIndex"];
   }
}

并使用TheIndex而不是i

编辑
此外,正如CodeInChaos所指出的,使用一个更具描述性的名称。如果其他人(或者几个月后你自己)需要维护此代码,这将有助于理解代码。

您可以将变量存储在ASP.Net提供的Session对象中。您也可以查看本教程。

if(Session["CurrentIndex"] != null) i = (int) Session["CurrentIndex"];
else Session["CurrentIndex"] = i;

希望这对你有用。