2012-06-11 28 views
2

當我在ASP.NET 4調用DataBind()上一個DropDownList,它拋出一個ArgumentNullException:ArgumentNullException時的DataBind()呼籲DropDownList的

System.ArgumentNullException:值不能爲空。參數名稱:在System.Web.UI.DataBinder.GetPropertyValue(對象 容器,字符串PROPNAME)在 System.Web.UI.DataBinder.GetPropertyValue(對象容器,字符串 PROPNAME,字符串格式)在 的System.Web 容器在 System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs的).UI.WebControls.ListControl.PerformDataBinding(IEnumerable的 的dataSource)在 System.Web.UI.WebControls.ListControl.PerformSelect()在 的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

'List '持有什麼?檢查它是否爲空? – Rahul

+0

@Rahul - 請參閱下面的答案。我找到了導致錯誤的原因。現在的原因是一個謎。 –

回答

2

進一步的谷歌搜索發現this other post,表明數據源中的空對象可能會導致此問題。我將我的DataSource行更改爲:

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

它工作。

我還沒有確定爲什麼/如何在該列表中有空值。嗯。