当字符串/对象列表绑定到数据源时,C#下拉选择项为null
本文关键字:选择 null 对象 字符串 列表 绑定 数据源 | 更新日期: 2023-09-27 18:15:50
我正在尝试将字符串列表绑定到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;
}
我在网上尝试了所有可能的解决方案。我甚至试着把它转换成字典,就像这里给出的一样。我还尝试将它转换为一个对象,为它分配一个标题和一个ID属性,如所示
谢谢。
您在dropdownlist中有绑定列表,但在选择任何值时都没有附加必须提取的值。
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;
看了看,我注意到两件事:
-
如果前4行在页面加载中,请确保将它们包装在中
if(!isPostBack({
}
如果它没有被包裹在!isPostBack则每次回发时,该值都将默认为第一个值,因为ddl每次都会反弹。
- 如上所述,您没有指定DataTextField或DataValueField。如果未指定这些,则会在下拉列表中获得对象类型,而不是值
此外,请考虑使用ddl。SelectedValue而不是SelectedItem。这样的文本将为您提供分配给DataValueField 的唯一ID
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();