ASP.NET,代码点击下一个按钮

时间:2014-02-12 14:26:36

标签: asp.net

以下是我的代码,我正在进行在线考试的项目,因为当我点击下一个按钮时,我有一个问题模块显示在这里,它应该转到下一个问题,但它不会进行。

    public partial class Student : System.Web.UI.Page
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);

        int i=1; 
        Session["Number"] = i;

    protected void Page_Load(object sender, EventArgs e)
    {

         Session["Number"] = i++;
         Label1.Text = Session["Number"].ToString();

            con.Open();
            SqlCommand cmd = new SqlCommand("Select * from Questions where QuestionNo = '"+Label1.Text+"'", con);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.Read())
            {
                Label2.Text = dr["Question"].ToString();
                Label3.Text = dr["Ans1"].ToString();
                Label4.Text = dr["Ans2"].ToString();
                Label5.Text = dr["Ans3"].ToString();
                Label6.Text = dr["Ans4"].ToString();
            }
            con.Close();

            con.Open();
            SqlCommand cmd1 = new SqlCommand("Select * from Answers where QuestionNo = '" + Label1.Text + "'", con);
            SqlDataReader dr1 = cmd1.ExecuteReader();
            if (dr1.Read())
            {
                Label8.Text = dr1["Answer"].ToString();
            }
            con.Close();   
    }
    protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton1.Checked)
        {
            Label7.Text = Label3.Text;
        }
    }
    protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton2.Checked)
        {
            Label7.Text = Label4.Text;
        }
    }
    protected void RadioButton3_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton3.Checked)
        {
            Label7.Text = Label5.Text;
        }
    }
    protected void RadioButton4_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton4.Checked)
        {
            Label7.Text = Label6.Text;
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Label7.Text == Label8.Text)
        {
            Label9.Text = "Your Answer is correct";
        }
        else
            Label9.Text = "Your Answer is incorrect";
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        i++;
        Session["Number"] = i;
        Response.Redirect("Student.aspx");

    }
}

2 个答案:

答案 0 :(得分:1)

这段代码中有很多不好的东西。

  1. 您应该始终正确地为变量命名。
  2. 由于SQL注入等安全原因
  3. ,请不要连接SQL查询
  4. 您应该使用Session["Number"]来选择问题编号而不是Label1.Text。
  5. 仅在必要时使用会话。

答案 1 :(得分:0)

您做错的第一件事就是如何在会话中存储i的值。每次进入方法时都会覆盖它,从而在每次单击按钮时产生相同的问题编号。

其次,您应该对查询进行参数化。

在每个按钮上单击,您应该从会话中检索i的值,然后递增它并再次将其存储在会话中。像:

int i = 0;
if (Session["Number"] == null)
{
    Session["Number"] = i;
}
else
{
    i = Convert.ToInt32(Session["Number"]);
}
//Later To increment Session

Session["Number"] = ++i; //First increments, then assigns the value

您还应该使用++i而不是i++,因为这会在增量之前存储i的值。