如何在不使用硬编码值的情况下选择特定行?

时间:2015-05-27 15:44:12

标签: c# asp.net sql-server

我有一个Q&用户可以询问软件相关问题的网站。在问题页面上,我有一个GridView,每行旁边都有单选按钮。想法是用户选择一个单选按钮,然后单击页面底部的按钮(btnAnswer),将它们传输到答案页面。使用SESSION,如何从“答案”页面上的数据库中选择特定问题?

以下是问题页面中我的代码的一小部分(请记住,此页面上的其他所有内容都按预期工作,并且一次只能选择一个单选按钮):

protected void btnAnswer_onClick(object sender, EventArgs e)
{
    for (int i = 0; i < grdAnswer.Rows.Count; i++)
    {
        RadioButton rb = (RadioButton)grdAnswer.Rows[i].Cells[0].FindControl("rbtnAnswer");
        if (rb.Checked)
        {
            string link = grdAnswer.Rows[i].Cells[0].Text.ToString();
            ClientScript.RegisterStartupScript(this.GetType(), "open" + i, "window.open('" + link + "');");
        }
    }
    Session["ButtonClicked"] = "btnAnswer";
    Response.Redirect("AnswerQuestion.aspx?tag=" + grdAnswer);
}

在“应答”页面上,我需要更改我的SQL查询,因此我没有硬编码值。以下是我需要改变的内容:

// This is part of several if statements and is designed so if the btnAnswer was clicked, it makes this GridView visible
else if (Session["ButtonClicked"] == "btnAnswer") 
{
    grdAnswerFromAsk.Visible = true;
    String connectionString = "Server=test;Database=testdb;User=root;Password=pw";

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        // the next line ID 45 is used and needs to be changed so that whatever radio button was selected, that is the question that displays on the Answer page
        SqlCommand cmd = new SqlCommand("SELECT Question FROM Questions WHERE QuestionID = 45");
        cmd.Connection = conn;
        conn.Open();
        cmd.ExecuteScalar().ToString();
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您需要将选中的单选按钮的值传递给答案页面 您在评论中写道,您不希望用户知道与单选按钮关联的问题ID是什么,因此这里有一个解决方案:
在第一个aspx页面中使用Dictionaty<string, int>,该页面将保存单选按钮的文本(如果它是唯一的)或网格行唯一的任何其他值作为键,并将问题ID作为值。
btnAnswer_onClick方法上,获取与已检查单选按钮的键对应的问题ID,并将其放在Session变量中。
然后,您所要做的就是从下一页的Session对象中获取值。

其次,使用parameter指定sql语句的值:

int CheckedRadioButtonValue = Session["CheckedRadioButtonValue "]; // perhaps a query string would be better here

using (SqlConnection conn = new SqlConnection(connectionString))
{

    SqlCommand cmd = new SqlCommand("SELECT Question FROM Questions WHERE QuestionID = @QuestionID");
    cmd.Parameters.AddWithValue("@QuestionID", CheckedRadioButtonValue);
    cmd.Connection = conn;
    conn.Open();
    cmd.ExecuteScalar().ToString();
}