会话问题-会话值在下一页中更改
问题描述:
我目前正在做一个在线考试项目.
我将正确答案存储在会话对象中.当我转到下一个网页时,会话对象的值会更改.我该如何解决这个问题?
代码:
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