在asp中没有工作viewstate

时间:2014-01-07 19:23:50

标签: c# asp.net viewstate

在我的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();
    }

5 个答案:

答案 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。