2012-01-01 56 views
2

我有一个DataList,它显示了一个RadioButtonList里面它包含从5到5的5个选择,但是当我尝试获取选定的RadioButtonList的值,它会引发空异常,这是我的代码: 错误@string choice = RadioButtonList1.SelectedItem.Value;RadioButtonList值的空引用异常

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. 
+0

您可以显示ASPX代码? – 2012-01-01 05:56:54

回答

2

我怀疑你的问题是与那些没有选定值的单选按钮名单。在这种情况下,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(); 
    } 
+0

非常感谢,它的工作:) – 2012-01-01 06:14:47

0

我看来像你没有找到控制RadioButtonList1

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

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

string choice = RadioButtonList1.SelectedItem.Value;