在我的ASP.NET Web应用程序中,我有一个“下一步”按钮控件。每次单击此按钮,我希望ViewState["QNO"]
的值增加1。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int qno = Convert.ToInt32(ViewState["QNO"]);
if (ViewState["QNO"] == null)
{
ViewState["QNO"] = 1;
}
else
{
ViewState["QNO"] = qno++;
}
}
按钮上的点击事件代码:
protected void btnNext_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(str);
con.Open();
SqlCommand cmd = new SqlCommand("select * from QSet where QID='" + ViewState["QNO"] + "'", con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
lblNo.Text = "(" + dr.GetValue(0).ToString() + ")";
lblQues.Text = dr.GetValue(1).ToString();
Qoptions.Items.Add(dr.GetValue(2).ToString());
Qoptions.Items.Add(dr.GetValue(3).ToString());
Qoptions.Items.Add(dr.GetValue(4).ToString());
Qoptions.Items.Add(dr.GetValue(5).ToString());
}
con.Close();
}
答案 0 :(得分:1)
我相信服务器端按钮单击会导致PostBack
。在您的代码中,您有if (!IsPostBack)
然后递增1.也许改为if (IsPostBack)
。
答案 1 :(得分:1)
if (!IsPostBack)
内的代码只会在初始加载时被点击。
将加载代码更改为
if (IsPostBack)
{
if (ViewState["QNO"] == null)
{
ViewState["QNO"] = 1;
}
else
{
int qno = Convert.ToInt32(ViewState["QNO"]);
ViewState["QNO"] = qno++;
}
}
答案 2 :(得分:1)
更改您的页面加载代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["QNO"] = 1;
}
else
{
ViewState["QNO"] = Convert.ToInt32(ViewState["QNO"]) +1;
}
}
答案 3 :(得分:1)
问题在于赋值增量运算符。此外,我做了一些更正。
public void IncrementQNO()
{
if (ViewState["QNO"] == null)
{
ViewState["QNO"] = 1;
}
else
{
int qno = Convert.ToInt32(ViewState["QNO"]);
ViewState["QNO"] = ++qno;
}
}
protected void Page_Load(object sender, EventArgs e)
{
IncrementQNO();
}
刚试过这个,它运行正常。
答案 4 :(得分:-1)
在你的page_load中,此行将立即失败:
int qno = Convert.ToInt32(ViewState["QNO"]);
代码没有在回发中运行,因此根据定义,从viewstate中提取的任何内容都将为null。
如果不在回发中,您需要另一个代码路径来初始化“QNO”,如果不是,则为0。