我正在尝试将字符串List绑定到Dropdown。 在前端,我能够正确地看到下拉列表,但是当我选择一个值并单击搜索时,它会抛出一个空引用异常,因为它看起来像是只读的。这就是我试过的:
<asp:DropDownList runat="server" ID="ddl" AppendDataBoundItems="True">
<asp:ListItem Value="">Please Select</asp:ListItem></asp:DropDownList>
代码背后:
List<string> items = helper.GetData(); //A method that simply returns a list of strings.
ddl.DataSource = items;
ddl.DataBind();
protected void searchClick(object sender, EventArgs e){
/*This is null and when I inspect this, I don't see any value matching
the string selected in dropdown.*/
var selectedOption = ddl.SelectedItem.Text;
}
我在线尝试了所有可能的解决方案。我甚至尝试将它转换为字典,就像它被赋予here一样。 我也尝试将其转换为一个对象,为其分配一个标题和一个ID属性给定here
谢谢。
答案 0 :(得分:1)
您在下拉列表中有绑定列表,但是没有附加在选择任何值时必须获取的值。
If(!isPostBack())
{
ddl.DataSource = items;
ddl.DataTextField = "Field name which hold items(Text to be shown in ddl)";
ddl.DataValueField = "ID of items(Value for items)";
ddl.DataBind();
}
如果只有列表并且必须在下拉列表中附加,那么请使用bleow代码。
List<string> items=helper.GetData();
for(var i=0; i < items.Count; i++)
{
ddl.Items.Add(new ListItem(i, items[i]));
//ddl.Items.Add(new ListItem(key, source)); For reference only
}
要获得价值,您可以使用:
ddl.SelectedItem.Value;
ddl.SelectedItem.Text;
答案 1 :(得分:0)
看看这个我注意到两件事:
如果页面中有前4行,请确保将它们包装在
中如果(!的IsPostBack) {
}
如果它没有包含在!isPostBack中,那么每次发生回发时该值都将默认为第一个值,因为ddl每次都会反弹。
另外,请考虑使用ddl.SelectedValue而不是SelectedItem.Text,因为这将为您提供分配给DataValueField的唯一ID
答案 2 :(得分:-1)
Dictionary<string, string> openWith =
new Dictionary<string, string>();
列出您需要使用以下下拉列表
ddl.DataSource = items;
ddl.DataTextField = "Text Which Show In DropDown";
ddl.DataValueField = "value -When Text Is Select From Dropdown";
ddl.DataBind();