当前位置:  开发笔记 > 编程语言 > 正文

asp:DropDownList错误:'DropDownList1'有一个SelectedValue,它是无效的,因为它在项目列表中不存在

如何解决《asp:DropDownList错误:'DropDownList1'有一个SelectedValue,它是无效的,因为它在项目列表中不存在》经验,为你挑选了2个好方法。

我有一个asp.net 2.0网站,有许多asp:DropDownList控件.DropDownList控件包含标准信息city,state,county等... info.除了标准代码之外,该站点还具有用户可以自行配置的自定义代码.例如,动物下拉列表可能包含值狗,猫,鱼等...

我正在从我创建的SQL 2005表中弹出DropDownList,例如tblCodes

一切都很好,用户可以使用众多DropDownList控件添加订单,从列表中选择项目.

如果用户想要更改其中一个自定义下拉列表,则会出现问题.例如,用户想要将动物类型控件上的verbage从Dog更改为K9.这是问题开始的地方.

对于所有新订单,下拉工作正常.当用户检索旧订单时,我在C#代码隐藏中得到以下错误"'DropDownList1'具有一个无效的SelectedValue,因为它在项目列表中不存在."

发生的事情是旧订单的数据库字段值为Dog,DropDownList在其列表中不再有Dog,因为用户将其更改为K9.

关于变通方法的任何想法?
有没有办法让asp:DropDownList接受没有在其列表中播种的项目?我可以使用另一个控件吗?



1> Josh Hinman..:

两天前我解决了这个完全相同的问题.首先,我将设置SelectedValue的代码移动到DropDownList的PreRender处理程序.然后,我添加逻辑以首先检查该值是否在下拉列表中.如果没有,我添加它.

这是我的代码.ddSpecialty是我的下拉列表,填充了数据库中的"特色".registration.Specialty是用户选择的专业,可能是也可能不是下拉列表,因为该特定专业可能已被删除,因为他们上次选择它.

protected void ddSpecialty_PreRender(object sender, EventArgs e)
{
    if (!ddSpecialty.Items.Contains(new ListItem(registration.Specialty)))
        ddSpecialty.Items.Add(registration.Specialty);
    ddSpecialty.SelectedValue = registration.Specialty;
}



2> Joshua Shann..:

我已经非常喜欢以下用于设置DropDownList值的小片段:

对于非DataBound(例如手动添加的项目):

ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(value));

对于DataBound:

ddl.DataBound += (o,e) => ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(value));

我确实希望尽管ListControls一般不会在你尝试将值设置为不存在的东西时抛出错误.至少在发布模式下,这对于悄然死亡本来是好的.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有