Null Reference Исключение значения RadioButtonList - PullRequest
2 голосов
/ 01 января 2012

У меня есть DataList, который отображает некоторые сообщения с RadioButtonList внутри, где он содержит 5 вариантов от 1 до 5, однако, когда я пытаюсь получить выбранное значение theRadioButtonList, он выдает исключение 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.

Ответы [ 2 ]

2 голосов
/ 01 января 2012

Я подозреваю, что ваша проблема связана с теми списками радиобуттон, у которых не выбрано значение.В этом случае selecteditem будет иметь значение 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();
    }
0 голосов
/ 01 января 2012

Похоже, вы не можете найти элемент управления RadioButtonList1

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

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

string choice = RadioButtonList1.SelectedItem.Value; 
...