我有一个数据列表,其中显示一些带有RadioButtonList的帖子,其中包含从1到5的5个选项,但是当我尝试获取选定的RadiooButtonList值时,它将引发Null异常,那就是我的代码:
错误@ 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.

最佳答案

我怀疑您的问题出在那些没有选择值的单选按钮列表上。在这种情况下,selecteditem将为空,但您没有对此进行测试。

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

    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();
    }

关于c# - RadioButtonList值的空引用异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8691943/

10-13 08:33