C# Asp.net dropdownlist getselectedvalue不返回任何内容
我对asp.net中的dropdownlist有问题。 当我尝试获取列表的选定值时,它不会返回任何内容。 aspx看起来像这样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
<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,因为非常清楚您的对象得到了正确的处理。您必须以这种方式阅读更多代码,尤其是当您添加错误处理和更多功能时,跟踪所有这些内容将变得越来越困难。