【问题标题】:Null Reference Exception of RadioButtonList valueRadioButtonList 值的空引用异常
【发布时间】:2012-01-01 14:04:17
【问题描述】:

我有一个 DataList,它显示一些带有 RadioButtonList 的帖子,其中包含从 1 到 5 的 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.

【问题讨论】:

    标签: c# asp.net datalist radiobuttonlist


    【解决方案1】:

    我怀疑您的问题出在那些没有选择值的单选按钮列表上。在这种情况下,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();
        }
    

    【讨论】:

      【解决方案2】:

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

      RadioButtonList RadioButtonList1 = (RadioButtonList)DataList2.FindControl("RadioButtonList1"); 
      
      if(RadioButtonList1 == null) throw new Exception("Can't find control RadioButtonList1");
      
      string choice = RadioButtonList1.SelectedItem.Value; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 2013-09-21
        • 2013-05-14
        • 1970-01-01
        相关资源
        最近更新 更多