DataBind()在DropDownList上调用时的ArgumentNullException

时间:2012-06-11 20:29:12

标签: asp.net data-binding argumentnullexception

当我在ASP.NET 4中的DropDownList上调用DataBind()时,它会抛出ArgumentNullException:

  

System.ArgumentNullException:值不能为null。参数名称:   System.Web.UI.DataBinder.GetPropertyValue(Object   container,String propName)at   System.Web.UI.DataBinder.GetPropertyValue(Object container,String   propName,String format)at   System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable的   dataSource)at   System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e)at   System.Web.UI.WebControls.ListControl.PerformSelect()at   System.Web.UI.WebControls.BaseDataBoundControl.DataBind()at   MyNamespace.MyClass.MyFunction()

这是我的代码:

myDropdown.Items.Clear();
myDropdown.ClearSelection();
myDropdown.Items.Add(new ListItem("-Select-", "-1"));
myDropdown.DataSource = myDataSource; //List<T> of my business objects
myDropdown.DataBind();

我发现this forum post似乎建议在下拉列表中删除DataValueField和DataTextField设置,这是我在标记中设置的。当我这样做并将我的代码的倒数第二行更改为此时,我仍然在选项中获得有意义的文本:

myDropdown.DataSource = myDataSource.Select(elem => new ListItem(elem.Text, elem.Id));

......它仍然不起作用。但是,当我拿走添加“-Select-”选项的行时,它确实有效。并且只有在数据绑定之前没有选择任何元素时才会中断。

发生了什么事?

1 个答案:

答案 0 :(得分:2)

进一步谷歌搜索发现this other post表明数据源中的空对象可能导致此问题。我将我的DataSource行更改为:

myDropdown.DataSource = myDataSource.Where(elem => elem != null);

它有效。

我还没有确定为什么/如何在该列表中使用空值。 HMM。