【发布时间】:2015-02-02 13:50:29
【问题描述】:
我正在尝试使用 System.Web.UI.WebControls.ListItems 的 Collections.Generic.List 对 asp:DropDownList 进行数据绑定。 DataBind() 抛出此错误。
System.ArgumentOutOfRangeException: 'ddlPlatinumOptions' 的 SelectedValue 无效,因为它不存在于项目列表中。
.ascx
<asp:DropDownList ID="ddlPlatinumOptions" runat="server" AutoPostBack="true" width="100%"></asp:DropDownList>
.ascx.cs
public void BindPlatinumOptions()
{
ddlPlatinumOptions.DataTextField = "Text";
ddlPlatinumOptions.DataValueField = "Value";
ddlPlatinumOptions.DataSource = _platinumOptions;
ddlPlatinumOptions.DataBind(); // Throwing Error
}
主持人
MattressProtectionInfo standard = RF_ProtectionPlan.GetMattressPlanInfo(MattressId, false);
MattressProtectionInfo premium = RF_ProtectionPlan.GetMattressPlanInfo(MattressId, true);
List<ListItem> plans = new List<ListItem>();
if (standard != null)
{
plans.Add(new ListItem(standard.Price.ToString("C") + " - Standard 5-Year Platinum Protection", standard.ProductID.ToString()));
}
if (premium != null)
{
plans.Add(new ListItem(premium.Price.ToString("C") + " - Premium 5-Year Platinum Protection", premium.ProductID.ToString()));
}
_view.PlatinumOptions = plans;
_view.BindPlatinumOptions();
数据示例
- 价值 =“21696”文本 =“99.95 美元 - 标准 5 年白金保护”
- 价值 =“21702”文本 =“119.95 美元 - 高级 5 年白金保护”
我尝试过的事情
- 在我的数据之前清空数据源和数据绑定以清除任何内容(也破坏了 dataBind)
- 重新定位 DataTextField 和 DataValueField 的位置(浪费时间 - 没有变化)
- 在数据绑定之前声明选定的索引为 0
- ddlPlatinumOptions.Items.Clear();
- ddlPlatinumOptions.ClearSelection();
我在抓稻草。似乎数据绑定正在尝试选择下拉列表中不存在的内容。
我没有看到我的代码中是否有错误?有什么想法吗?
【问题讨论】:
-
而不是 Binding ..为什么不直接将项目添加到
DropDownList.. 如果这不是一个选项,那么看看这里这应该有助于解决您的问题Ryan O'Hara@987654321 @ -
我已经在构建我的 ListItem ,就像那个答案中一样。问题似乎在 asp.net DropDownList.DataBind() 中。它似乎试图选择一个尚未绑定的值?如果我将 BindPlatinumOptions() 包装在 try catch 中并吞下错误,ListItem 仍会呈现到页面并正常工作。我想知道它为什么会抛出这个错误,但我无法找到 asp 3.5 的 asp.net Databind 方法的源代码
-
好吧,它是从什么事件触发的..这是在
Load还是在回发期间发生的..我认为你可以像我提到的那样直接绑定而不使用 List- 例如,关于加载 ddl..,您从哪里获取数据或从哪里读取数据?我认为有一个更简单的方法
-
我将它绑定在 ViewLoad 上,我正在演示器中构建列表
,而不是在视图上对其进行硬编码。 -
我认为您无论如何都不会理解,请查看我之前/之前评论中发布的链接,您显然做错了,我不是在谈论硬编码
标签: c# asp.net mvp system.web.ui.webcontrols