2013-02-01 26 views
6

我有問題與asp.net綁定到dropdownlist,我不知道如何調試。我檢查了關於這個堆棧的其他問題,但沒有任何幫助。據我可以看到它應該選擇的「名稱」在列表中。有一個無效的SelectedValue,因爲它不存在於項目列表中。你如何調試?

<asp:DropDownList ID="dd1" runat="server" DataSourceID="ADataSource" DataTextField="Name" 
                DataValueField="Name" SelectedValue='<%# Bind("Name") %>' Width="255" 
                AppendDataBoundItems="true" TabIndex="3" Font-Size="small" EnableViewState="true" > 
              <asp:ListItem Text="Select" Value="" /> 
              </asp:DropDownList> 

以下是錯誤

System.ArgumentOutOfRangeException了未處理由用戶代碼 消息=「DD1」具有的SelectedValue,因爲它不在項目列表中存在這是無效的。 參數名:值 源=的System.Web PARAMNAME =值 堆棧跟蹤: 在System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable的 的dataSource) 在System.Web.UI.WebControls.ListControl.OnDataBinding( EventArgs e) at System.Web.UI.WebControls.ListControl.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at System.Web.UI.Control.DataBindChildren() at System。 Web.UI.Control.DataBind(布爾raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.Control.DataBindChildren() System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.Control.DataBindChildren() at System.Web.UI.Control .DataBind(布爾raiseOnDataBinding) 在System.Web.UI.Control.DataBind() 在System.Web.UI.Control.DataBindChildren() 在System.Web.UI.Control.DataBind(布爾raiseOnDataBinding) 在系統.Web.UI.WebControls.DetailsView.CreateChildControls(IEnumerable的 的dataSource,布爾數據綁定) 在System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable的 數據) 在System.Web.UI.WebControls.DetailsView.PerformDataBinding( IEnumerable的 數據) 在System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable的 數據) 在System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 參數,DataSourceViewSelectCallback回調) 在System.Web.UI.WebControls。 DataBoundControl.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at System.Web.UI.WebControls.DetailsView.DataBind() at storeUpdate.GvStoresSelect_SelectedIndexChanged(Object sender,EventArgs e)in line 233 at System.EventHandler.Invoke(Object sender,EventArgs e) at System.Web.UI.WebControls.GridView.OnSelectedIndexChanged(EventArgs e) at System.Web.UI.WebControls.GridView.HandleSelect(Int32 rowIndex) at System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e,Boolean causesValidation,String validationGroup) at System.Web.UI.WebControls。 GridView.OnBubbleEvent(對象源,EventArgs的) 在System.Web.UI.Control.RaiseBubbleEvent(對象源,EventArgs的參數) 在System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(對象源, EventArgs的) 在System.Web.UI.Control.RaiseBubbleEvent(Object source,EventArgs args) at System.Web.UI.WebControls.LinkBut​​ton.OnCommand(CommandEventArgs e) at System.Web.UI.WebControls.LinkBut​​ton。RaisePostBackEvent(字符串 eventArgument) 在System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument) 在System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串eventArgument ) 在System.Web.UI.Page.RaisePostBackEvent(NameValueCollection中POSTDATA) 在System.Web.UI.Page.ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint) 的InnerException:

回答

6

<%# Bind("Name") %>的值,其傳遞給SelectedVal ue屬性,與其集合中的項目不匹配。最可能的原因:

  • DropDownList中沒有的項目,因爲該列表獲取綁定
  • 前表綁定評估情況,但缺少此特定值
  • 返回可能是空值
+0

有沒有看到它試圖使用的價值? – chobo2

+1

在控件外部使用'<%#Eval(「Name」)%>'並查看它加載的內容。 –

2

我意識到這是一個古老的線索,但谷歌提出這個問題作爲這個問題的第一個選擇 - 用一個相當通用的搜索術語。

無論如何,我遇到的問題以及解決問題的方法如下。這個問題要麼出現,像布萊恩電源表示,原因如下:

  • DropDownList中沒有的項目,因爲評估情況列表獲取綁定
  • 之前的名單必然會但是缺少這個特定值
  • 返回的值可能爲空

這個問題我正經歷,即使我沒有在一些箇中出現錯誤就不是很清楚E的其他下拉菜單我用同樣的方法,是在頁面的加載,我試圖用這個代碼後面的項目添加到DropDownList的:

drpNationality.Text = GlobalScript.CountDatabaseRecords("SELECT [nationality_desc] FROM [tbl_people] INNER JOIN [tbl_lkup_nationality] AS nationality ON [nationality] = [nationality_id] WHERE [person_id] ='" + Session["ID"] + "'"); 

這裏是下拉HTML(其中有一個數據源填充項):

<label>Nationality:</label> 
<asp:DropDownList ID="drpNationality" runat="server" DataSourceID="Nationality_Datasource" DataTextField="nationality_desc" DataValueField="nationality_id"> 
</asp:DropDownList> 

現在,我得到的是,該數據尚未在負載時必然要控制,當我試圖在添加項目問題代碼behing。因爲我試圖在啓動時爲用戶預先選擇數據庫中的值(列表中確實存在),所以如果該項目本質上出現了兩次,我並不太感到困擾。

所以我的解決方法如下。

我改變後面的代碼以下,所以該項目被添加到DropDownList的上加載事件代碼的執行,然後選擇:

var = GlobalScript.CountDatabaseRecords("SELECT [nationality] FROM [tbl_people] INNER JOIN [tbl_lkup_nationality] AS nationality ON [nationality] = [nationality_id] WHERE [person_id] ='" + Session["ID"] + "'"); 
drpNationality.Items.Add(var); 
drpNationality.Text = var; 

但爲了將其所選擇的項從數據庫

<label>Nationality:</label> 
<asp:DropDownList ID="drpNationality" runat="server" DataSourceID="Nationality_Datasource" DataTextField="nationality_desc" DataValueField="nationality_id" AppendDataBoundItems="True"> 
</asp:DropDownList> 

現在,當加載頁面時,值:在代碼隱藏留一旦頁面完全加載,而不是由數據源被覆蓋,您必須將HTML更改爲以下應該在下拉菜單中預先選擇,並且還應該添加所有的DataSource項目。

希望這會有所幫助。

1

我有同樣的問題。這是發生了什麼事。我最初設定的值不在我的下拉列表中。如果您原本不在要顯示在下拉列表中的值中,那麼它將不起作用。例如,如果您最初在數據中擁有Fred,則需要在該下拉列表中包含Fred。

1

DataBind很臭。我嘗試了所有提到的建議,但都沒有成功。結束了設置SelectedValue爲空,清除所有項目(myDDL.Items.Clear()),然後通過我的列表迭代和手動添加新時listItems - myDDL.Items.Add(new ListItem(myListEntry.Text,myListEntry.Value))

0

在我的情況的方法清除下拉列表最初設定爲ddlname.text = string.empty

我將它重置爲ddlname.items.clear(),這解決了錯誤。

0

如果在分配數據源之前下拉控件Text屬性被分配了任何值,則會發生此錯誤。

例子:

StatusDropDown.Text = "some value"; 
StatusDropDown.DataSource = statusDatatable; 

在執行2號線,你會得到錯誤。

0

我遇到了類似的問題 - 基本問題是我的RadioButtonList引用的底層SQL數據庫字段的格式。我將數據庫字段從NCHAR轉換爲VARCHAR ...我認爲NCHAR向RadiolButton的評估中出現錯誤的字段添加了額外的內容。您可能必須刪除並加載以NCHAR格式輸入到VARCHAR的數據。這對我有用..希望它適合你。

相關問題