Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net dropdownlist getselectedvalue不返回任何内容_C#_Asp.net - Fatal编程技术网

C# Asp.net dropdownlist getselectedvalue不返回任何内容

C# Asp.net dropdownlist getselectedvalue不返回任何内容,c#,asp.net,C#,Asp.net,我对asp.net中的dropdownlist有问题。 当我尝试获取列表的选定值时,它不会返回任何内容。 aspx看起来像这样 <div class="form-signin"> <h2 class="form-signin-heading">Slet besked</h2> <div class="input-group"> <span class="input-group-a

我对asp.net中的dropdownlist有问题。 当我尝试获取列表的选定值时,它不会返回任何内容。 aspx看起来像这样

    <div class="form-signin">
        <h2 class="form-signin-heading">Slet besked</h2>
        <div class="input-group">
            <span class="input-group-addon">ID</span>
            <asp:dropDownList runat="server" CssClass="form-control" ID="sletBox" />
        </div>
        <asp:Button runat="server" CssClass="btn btn-lg btn-block btn-danger" Text="Slet" OnClick="Slet" />
    </div>
 protected void Slet(object sender, EventArgs e)
{
    Response.Write("wow der sker noget");
    Response.Write(sletBox.SelectedItem.Value);
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    SqlConnection myconnection = new SqlConnection();
    SqlCommandBuilder cmdBuilder = new SqlCommandBuilder();
    myconnection.ConnectionString = constr;
    myconnection.Open();
    string sqlcmd = "DELETE FROM messages WHERE messageid = '" + sletBox.SelectedValue.ToString() + "'";
    SqlCommand messageDelete = new SqlCommand(sqlcmd, myconnection);
    messageDelete.ExecuteNonQuery();
    myconnection.Close();
}
唯一有效的是响应。写(哇)而不是selectedvalue

编辑: 页面加载代码

 protected void Page_Load(object sender, EventArgs e)
{
    DataTable subjects = new DataTable();

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
    {


        SqlDataAdapter adapter = new SqlDataAdapter("SELECT messageId, messageText FROM messages", con);
        adapter.Fill(subjects);

        sletBox.DataSource = subjects;
        sletBox.DataTextField = "messageText";
        sletBox.DataValueField = "messageId";
        sletBox.DataBind();



    }


    sletBox.Items.Insert(0, new ListItem("Vælg besked", ""));
}

只有当IsPostBack为false时,才能加载DropDownList数据,否则每次回发时都会重新加载控件。绑定到控件的数据一旦更改,选定的值也将丢失。请记住,页面加载事件是在SelectedIndexChanged事件发生时触发的

if(!Page.IsPostBack) 
{
    DataTable subjects = new DataTable();

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
    {


        SqlDataAdapter adapter = new SqlDataAdapter("SELECT messageId, messageText FROM messages", con);
        adapter.Fill(subjects);

        sletBox.DataSource = subjects;
        sletBox.DataTextField = "messageText";
        sletBox.DataValueField = "messageId";
        sletBox.DataBind();
    }

    sletBox.Items.Insert(0, new ListItem("Vælg besked", ""));
}

您正在为
pageload
中的
dropdownlist
执行数据绑定,而没有检查
IsPostBack
。因此,当按钮触发clik时,它会重置selectedvalue。更改您的
PageLoad
如下所示

 if (!IsPostBack)
 {
   DataTable subjects = new DataTable();
   using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString)
   {
      SqlDataAdapter adapter = new SqlDataAdapter("SELECT messageId, messageText FROM messages", con);
      adapter.Fill(subjects);

      sletBox.DataSource = subjects;
      sletBox.DataTextField = "messageText";
      sletBox.DataValueField = "messageId";
      sletBox.DataBind();
  }

    sletBox.Items.Insert(0, new ListItem("Vælg besked", ""));
 }

作为Mathew建议的旁注,请尝试添加
使用
,以更好地管理您的连接对象,以便在使用后将其正确处理。

您可以将page_load?旁注中的代码发布到实际问题中吗,使用块在
中包装
SqlConnection
SqlCommand
将使代码更易于维护、可读和可靠。值得思考。我猜你的
Page\u Load
方法没有检查
Page.IsPostBack
,因此,您正在写入否则将成为选定值的内容。@MatthewHaugen为什么使用块更易于维护?@ChristianPåbølJacobsen,因为非常清楚您的对象得到了正确的处理。您必须以这种方式阅读更多代码,尤其是当您添加错误处理和更多功能时,跟踪所有这些内容将变得越来越困难。