11

我在将 asp.net 绑定到下拉列表时遇到问题,我不知道如何调试。我在堆栈上查看了有关此问题的其他问题,但没有任何帮助。据我所知,它应该选择的“名称”在列表中。

<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 未被用户代码处理 Message='dd1' 有一个无效的 SelectedValue,因为它不存在于项目列表中。参数名称:值 Source=System.Web ParamName=value StackTrace:在 System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource) 在 System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) 在 System.Web .UI.WebControls.ListControl.PerformSelect() 在 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 在 System.Web.UI.Control.DataBindChildren() 在 System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)在 System.Web.UI.Control.DataBind() 在 System.Web.UI.Control.DataBindChildren() 在 System.

4

8 回答 8

9

传递给 SelectedValue 属性的来自 的值<%# Bind("Name") %>与其集合中的项目不匹配。最可能的原因:

  • DropDownList 没有项目,因为评估发生在列表绑定之前
  • 该列表已绑定,但缺少此特定值
  • 返回的值可能为 null
于 2013-02-01T20:21:55.767 回答
4

我意识到这是一个旧线程,但谷歌将此作为解决此问题的第一个选项 - 使用相当通用的搜索词。

无论如何,我遇到的问题以及解决方法如下。就像 Brian Mains 所说的那样,问题将会出现,原因如下:

  • DropDownList 没有项目,因为评估发生在列表绑定之前
  • 该列表已绑定,但缺少此特定值
  • 返回的值可能为 null

我遇到的问题,即使不是很清楚,因为我在使用相同方法的其他一些 DropDowns 上没有收到错误,是在加载页面时,我试图使用此代码-behind 向 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"] + "'");

这是 DropDown HTML(其中包含由数据源填充的项目):

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

现在,我遇到的问题是在加载时数据没有绑定到控件,当我试图在代码中添加项目时。因为我试图在启动时为用户从数据库中预先选择一个值(它确实存在于列表中),所以如果该项目基本上在那里出现了两次,我不会太在意。

所以我的解决方法如下。

我将后面的代码更改为以下代码,以便在执行加载事件代码时将该项目添加到 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;

但是为了在页面完全加载后保留在代码隐藏中选择的项目并且不被数据源覆盖,您必须将 HTML 更改为以下内容:

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

现在,当页面加载时,应该在下拉列表中预先选择数据库中的值,并且还应该添加所有 DataSource 项。

希望这可以帮助。

于 2013-06-10T10:43:56.657 回答
3

DataBind 很臭。我尝试了所有提到的建议,但都没有奏效。最终设置SelectedValue为空,清除所有项目(myDDL.Items.Clear()),然后遍历我的列表并手动添加新的 ListItems - myDDL.Items.Add(new ListItem(myListEntry.Text,myListEntry.Value))

于 2015-09-10T15:13:55.417 回答
1

我有同样的问题。这是发生了什么。我最初将该值设置为不在我的下拉列表中的值。如果您最初拥有的值不在您想要在下拉列表中显示的值中,那么它将不起作用。例如,如果您最初在数据中包含 Fred,则需要在该下拉列表中包含 Fred。

于 2015-01-13T19:32:22.667 回答
1

如果在分配数据源之前为下拉控件Text属性分配了任何值,则会出现此错误。

例子:

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

在执行第二行时,您将收到该错误。

于 2016-07-01T08:37:00.147 回答
0

在我的情况下,清除下拉列表的方法最初设置为ddlname.text = string.empty.

我将其重置为ddlname.items.clear(),这解决了错误。

于 2015-12-03T15:14:08.173 回答
0

我遇到了类似的问题 - 基本问题是我的 RadioButtonList 引用的基础 SQL 数据库字段的格式。我将 DB 字段从 NCHAR 转换为 VARCHAR ...我认为 NCHAR 向字段添加了额外的内容,这在 RadiolButton 的评估中引发了错误。您可能必须将作为 NCHAR 放入的数据删除并加载到 VARCHAR。这对我有用..希望它对你有用。

于 2017-03-16T02:16:01.893 回答
0

在使用不在数据绑定列表中的值对其进行数据绑定之前,请检查您是否正在设置下拉列表的值。

In my case this occurred like I set the value of dropdown with "ABC" and the list I was binding with dropdown has got only values {"1", "2", "3" ,"4"}

于 2022-02-17T17:17:04.400 回答