当绑定到数据源的字符串/对象列表时,C#dropdown selected item为null

时间:2016-11-02 05:24:36

标签: c# asp.net webforms

我正在尝试将字符串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

谢谢。

3 个答案:

答案 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)

看看这个我注意到两件事:

  1. 如果页面中有前4行,请确保将它们包装在

    如果(!的IsPostBack) {

    }

  2. 如果它没有包含在!isPostBack中,那么每次发生回发时该值都将默认为第一个值,因为ddl每次都会反弹。

    1. 如上所述,您没有指定DataTextField或DataValueField。如果未指定这些,您将在下拉列表中获取对象类型而不是值。
    2. 另外,请考虑使用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();