如何避免在单击按钮后实例化变量
本文关键字:实例化 变量 按钮 单击 何避免 | 更新日期: 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;
希望这对你有用。