会话问题-会话值在下一页中更改

问题描述:

我目前正在做一个在线考试项目.

我将正确答案存储在会话对象中.当我转到下一个网页时,会话对象的值会更改.我该如何解决这个问题?

代码:

I am currently doing a project on online examination.

I store the correct answer in a session object. When i move on to the next webpage the value of the session object changes. How can I solve this problem?

Code:

Ans += sdr["corAns"].ToString();
Session["Ans"] = Ans;


//值为1412
第二个网页:


// value is 1412
2nd web page:

string Rans = Session["Ans"].ToString(); // value is1214


请帮我.我是编程新手.


Please help me. I''m new in programming.

玫瑰,

通过断点调试代码以进行检查,是否有任何代码正在更改会话的值... ??
Hi rose,

Debug your Code By Breakpoints To Check ,Is there any Code that is Changing The Value Of Session....?


我尝试过,但找不到解决方案.这是我的代码.
I tried, but i can''t find a solution. This is my code.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;


using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;


public partial class xfianlexam : System.Web.UI.Page
{
    SqlCommand cmd1;
    public string qnum;
    public string Ans = null;
    public int tNUM;
    protected void Page_Load(object sender, EventArgs e)
    {
        lblStuNum.Text = Session["id"].ToString();
        SqlConnection cn = myClass.DBCon();
        cn.Open();
        SqlCommand c = new SqlCommand("select * from student where snum='" + Session["id"].ToString() + "'", cn);

        SqlDataReader r = c.ExecuteReader();

        r.Read();
        lblStuName.Text = r["sname"].ToString();
        Session["sname"] = lblStuName.Text;

        cn.Close();
        
        
        SqlConnection scn = myClass.DBCon();
        scn.Open();
        SqlCommand cmd2 = new SqlCommand("select * from course where courseid='" + Session["courseid"].ToString() + "'", scn);
        SqlDataReader ssr = cmd2.ExecuteReader();

        ssr.Read();
        lblCourseid.Text = ssr["courseid"].ToString();
        Session["courseid"] = lblCourseid.Text;


        scn.Close();



        Session["name"] = lblStuName.Text;
    

        int i = 1;
       SqlConnection con = myClass.DBCon();
        
        con.Open();
      
          const int Total = 10;
            ArrayList lstNumbers = xfianlexam.RandomNumbers(Total);

            for (int i1= 0; i1 < lstNumbers.Count; i1++)
            {

               
                cmd1 = new SqlCommand("select * from Question where Courseid='" + Session["courseid"].ToString() + "'and questOrder='" + lstNumbers[i1] + "'", con);
               
                SqlDataReader sdr = cmd1.ExecuteReader();
                while (sdr.Read())
                {
                    
                    Literal littxt = new Literal();
                    Literal litti = new Literal();

                    RadioButtonList cbk = new RadioButtonList();
                    cbk.ID = "cbk" + i.ToString();
        littxt.Text = "<font style="background : #FFF8C6;">" +i.ToString() + "、" + Server.HtmlEncode(sdr["Quest"].ToString())+"</font><br><blockquote>";
                    litti.Text = "</blockquote>";
                   

                    qnum = i.ToString();
                    Session["qnum"] = qnum;
                    cbk.Items.Add("A. " + Server.HtmlEncode(sdr["opt1"].ToString()));
                    cbk.Items.Add("B. " + Server.HtmlEncode(sdr["opt2"].ToString()));
                    cbk.Items.Add("C. " + Server.HtmlEncode(sdr["opt3"].ToString()));
                    cbk.Items.Add("D. " + Server.HtmlEncode(sdr["opt4"].ToString()));
                    cbk.Font.Size = 11;
                    for (int j = 1; j <= 4; j++)
                    {
                        cbk.Items[j - 1].Value = j.ToString();
                    }


                    Label7.Text += sdr["corAns"].ToString();
                    Ans += sdr["corAns"].ToString();


                    Label5.Text = Ans.ToString();
                
                         Session["Ans"] = Ans;
                  
                    Panel2.Controls.Add(littxt);
                    Panel2.Controls.Add(cbk);
                    Panel2.Controls.Add(litti);

                    i++;
                    tNUM++;

                    
                }

                sdr.Close();
                //sdr10.Close();
                cn.Close();
            }
        Label8.Text = Label5.Text;
        

      


        }

    public static ArrayList RandomNumbers(int max)
    {
        // Create an ArrayList object that will hold the numbers
        ArrayList lstNumbers = new ArrayList();
        // The Random class will be used to generate numbers
        Random rndNumber = new Random();

        // Generate a random number between 1 and the Max
        int number = rndNumber.Next(1, max + 1);
        // Add this first random number to the list
        lstNumbers.Add(number);
        // Set a count of numbers to 0 to start
        int count = 0;

        do // Repeatedly...
        {
            // ... generate a random number between 1 and the Max
            number = rndNumber.Next(1, max + 1);

            // If the newly generated number in not yet in the list...
            if (!lstNumbers.Contains(number))
            {
                // ... add it
                lstNumbers.Add(number);
            }

            // Increase the count
            count++;
        } while (count <= 10 * max); // Do that again

        // Once the list is built, return it
        return lstNumbers;
    }
    protected void Finish_Click(object sender, EventArgs e)
    {


    }
  
        protected void ibtnFin_Click(object sender, EventArgs e)
    {
     
        string msc = "";
        for (int i = 1; i <= tNUM; i++)
        {
            RadioButtonList list = (RadioButtonList)Panel2.FindControl("cbk" + i.ToString());
            if (list != null)
            {
                if (list.SelectedValue.ToString() != "")
                {

                    msc += list.SelectedValue.ToString();
                }
                else
                {
                    msc += "0";
                }
            }
        }
        Session["Sans"] = msc;
        //----------------------------
        Label9.Text = msc;
        Session["snum"] = lblStuNum.Text;
              SqlConnection cn = myClass.DBCon();
        cn.Open();
        string sno = lblStuNum.Text;
            SqlConnection cn2 = myClass.DBCon();

        cn2.Open();
        SqlCommand cmd = new SqlCommand("select count(*) from result where sname='" + Session["sname"].ToString() + "' and courseid='" + Session["courseid"].ToString() + "'", cn2);
        int i1 = Convert.ToInt32(cmd.ExecuteScalar());

        if (i1 > 0)
        {
            Response.Write("<script language='javascript'>alert('You have already participated in this examination');</script>");
            Response.Redirect("studHome.aspx");
        }
        else
        {
            SqlDataSource sds1 = new SqlDataSource();

            sds1.ConnectionString = ConfigurationManager.ConnectionStrings["examConnectionString"].ToString();

            lblStuNum.Text = Session["id"].ToString();
            sds1.InsertCommand = "insert into result(sname,courseid) values (@sname,@courseid)";

            sds1.InsertParameters.Add("sname", Session["sname"].ToString());
            sds1.InsertParameters.Add("courseid", Session["courseid"].ToString());
          





            int rowsAffect = sds1.Insert();

       
            Response.Redirect("stuResult.aspx?BInt=" + tNUM.ToString());

        }
        
    }


        protected void btnsubmit_Click(object sender, EventArgs e)
        {

        }
}


似乎Page_Load中的代码在每次往返中都运行,这可能是问题所在.如果不是,则可以检查ISPostBack,并可以限制代码在Page Load中运行一次.

只是一个疯狂的猜测
seems code inside Page_Load runs on every roundtrip and it may be the issue.Is it done in any purpose . If not you can Check ISPostBack and can restrict the code to run once in Page Load

Its just a wild guess