当我在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-”选项的行时,它确实有效。并且只有在数据绑定之前没有选择任何元素时才会中断。
发生了什么事?
答案 0 :(得分:2)
进一步谷歌搜索发现this other post表明数据源中的空对象可能导致此问题。我将我的DataSource行更改为:
myDropdown.DataSource = myDataSource.Where(elem => elem != null);
它有效。
我还没有确定为什么/如何在该列表中使用空值。 HMM。