RadioButtonList值的空引用异常

时间:2012-01-01 05:16:16

标签: c# asp.net datalist radiobuttonlist

我有一个DataList,它显示一些带有RadioButtonList的帖子,其中包含5个选项,从1到5,但是当我尝试获取theRadioButtonList的选定值时,它会抛出Null Exception,这就是我的代码: 错误@ string choice = RadioButtonList1.SelectedItem.Value;

protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (DataListItem item in DataList2.Items)
            {
                RadioButtonList RadioButtonList1 = (RadioButtonList)DataList2.FindControl("RadioButtonList1");
                string choice = RadioButtonList1.SelectedItem.Value;
                Label post_IDLabel = (Label)item.FindControl("post_IDLabel");
                int post_ID = Convert.ToInt32(post_IDLabel.Text);
                int value = Convert.ToInt32(choice.ToString());
                string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
                SqlConnection conn = new SqlConnection(connStr);
                SqlCommand cmd = new SqlCommand("rate", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                string email = Session["email"].ToString();
                int course_ID = Convert.ToInt32(Request.QueryString["courseID"]);
                cmd.Parameters.Add(new SqlParameter("@course_ID", course_ID));
                cmd.Parameters.Add(new SqlParameter("@postID", post_ID));
                cmd.Parameters.Add(new SqlParameter("@myemail", email));
                cmd.Parameters.Add(new SqlParameter("@rate", value));
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
                Response.Write(choice);
            }
            DataList2.DataBind();
        }

这是错误:

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

2 个答案:

答案 0 :(得分:2)

我怀疑你的问题是那些没有选择值的无线电排序列表。如果是这种情况,selectitem将为null,但您没有对此进行测试。

这是一个重写,它还修复了未被处理的连接和命令以及连接过度打开和关闭的潜在问题:

    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            using (SqlCommand cmd = new SqlCommand("rate", conn))
            {
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.Add("@course_ID", System.Data.SqlDbType.Int);
                cmd.Parameters.Add("@postID", System.Data.SqlDbType.Int);
                cmd.Parameters.Add("@myemail", System.Data.SqlDbType.Int);
                cmd.Parameters.Add("@rate", System.Data.SqlDbType.VarChar);
                conn.Open();

                foreach (DataListItem item in DataList2.Items)
                {
                    RadioButtonList RadioButtonList1 = (RadioButtonList)DataList2.FindControl("RadioButtonList1");
                    if (RadioButtonList1.SelectedItem != null)
                    {
                        string choice = RadioButtonList1.SelectedItem.Value;
                        Label post_IDLabel = (Label)item.FindControl("post_IDLabel");

                        cmd.Parameters["@course_ID"].Value = Convert.ToInt32(Request.QueryString["courseID"]);
                        cmd.Parameters["@postID"].Value = Convert.ToInt32(post_IDLabel.Text);
                        cmd.Parameters["@myemail"].Value = Session["email"] as string;
                        cmd.Parameters["@rate"].Value = Convert.ToInt32(RadioButtonList1.SelectedItem.Value);

                        cmd.ExecuteNonQuery();
                        Response.Write(choice);
                    }
                }
            }
        }
        DataList2.DataBind();
    }

答案 1 :(得分:0)

在我看来,你没有找到控件 RadioButtonList1

RadioButtonList RadioButtonList1 = (RadioButtonList)DataList2.FindControl("RadioButtonList1"); 

if(RadioButtonList1 == null) throw new Exception("Can't find control RadioButtonList1");

string choice = RadioButtonList1.SelectedItem.Value;