全局变量值不会在asp.net中的页面回发中持久存在

时间:2016-10-22 14:26:24

标签: c# asp.net .net pageload page-lifecycle

我正在实施一个测验门户类型的Web应用程序。

第一个问题是从db获取正常。 点击下一个按钮,下一个问题正在取得好处。现在再次点击 next或prev 按钮没有任何反应!

使用的概念 - 制作了一个全局变量,它将等于当前的问题编号。从我的问题表中,下一个/上一次点击增加/减少变量

为什么这种方法不起作用! 我应该在Page_Load或其他地方更改哪些代码?

注意:

1.使用了断开的模型

2.countdown计时器在回发时工作正常,没问题。

附加图片 ..

1。question table design here

2.On默认页面(ques1)和点击下一步按钮(ques2)  Q1. and Q2. combined image

public partial class quiz : System.Web.UI.Page
{
int qno=0;  //global variable
DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{

    if (Session["sname"] == null)
    {
        Response.Redirect("home.aspx");
    }
    string qpname = Request.QueryString["qpname"]; //question paper table name

    //**some countdown timer code here**

    SqlConnection conn = null;
    conn = new SqlConnection();
    conn.ConnectionString = "Data Source=xyz; Initial Catalog=xzyyzz;Integrated Security=True;";

     String queryString = "select * from " + qpname + "";
     SqlCommand cmd = new SqlCommand(queryString, conn);      
     SqlDataAdapter ad = new SqlDataAdapter(queryString, conn);
     dt = new DataTable();
     ad.Fill(dt);


     foreach (DataRow row in dt.Rows)
      {
          Label6.Text = row["marks"].ToString(); //for marks of current ques. 
          Label7.Text = row["ques"].ToString();  //for ques.
          qno = (int)row["qno"]; //ques no.
          qno = qno + 1; //
          break;
       }

}


protected void Timer1_Tick(object sender, EventArgs e)
{
    //some timer code here
}

public class CountDownTimer
{
   //some timer code here
}

protected void submit_Click(object sender, EventArgs e)
{

    Response.Redirect("student.aspx"); //redirect on submit

}

protected void prev_Click(object sender, EventArgs e)   //prev button
{

    display_ques(-1);

}
protected void next_Click(object sender, EventArgs e)   //next button
{
    display_ques(1);
}

public void display_ques(int direction)
{
    DataRow[] result = dt.Select(" qno = " +qno+ ""); //for current ques no.

    foreach (DataRow row in result)
    {
        Label6.Text = row["marks"].ToString();
        Label7.Text = row["ques"].ToString();
        if (direction == 1)
            qno=qno+1;
        else
            qno=qno-1;
        break;

    }
}
}

请帮帮我们!坚持这个..

1 个答案:

答案 0 :(得分:1)

如果您想在回发之间保留一些值,请使用SessionViewState

Session["qno"] = (int)row["qno"];

如何从Session获取值。

int qno = 0;
if(Session["qno"] != null)
   qno = int.TryParse(Session["qno"].ToString(), out qno);