【问题标题】:Why is drop-down list throwing an error on binding?为什么下拉列表在绑定时会抛出错误?
【发布时间】:2021-07-12 09:47:02
【问题描述】:

当某些特定条件发生变化时,我正在尝试填充下拉列表。这在所有情况下都可以正常工作 99%。但是偶尔,我会在我们的生产服务器上收到此错误:

Exception of type 'System.Web.HttpUnhandledException' was thrown.; 'ddlNCE' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value;

我们无法在我们的开发环境中复制这一点。这是调用堆栈:

at System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource)
at System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e)
at System.Web.UI.WebControls.ListControl.PerformSelect()
at SeqClass.FillDDL(DropDownList aList)
at operations.BindEventDataDDLs()
at operations.SetFilterPanels()
at System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventA...

这里是绑定下拉的简化函数:

Public Shared Sub FillDDL(aList As DropDownList)
    aList.Items.Clear()
    aList.ClearSelection()

    aList.DataTextField = "TextColumn"
    aList.DataValueField = "ID"
    aList.DataSource = DAL.GetDataTable("Select ID,TextColumn From MyTable Order By TextColumn")
    aList.DataBind()
    aList.Items.Insert(0, New ListItem("-- Select Item --", String.Empty))
End Sub

在调用Databind 之前,正在清除列表和选择。有谁知道为什么这个错误在我们的生产服务器上随机发生?

【问题讨论】:

  • 我没有任何想法,但我尝试调试它的第一件事是抛出一个带有一些日志记录的 try/catch 块,以尝试获取有关系统状态的更多信息。发生错误。现在,你不知道值是什么,也不知道当时的列表是什么;如果你知道这些事情,也许问题就很明显了。

标签: asp.net vb.net


【解决方案1】:

在我的例子中,我们有一个“项目”列表,用户可以从中选择并存储在他们的“购物车”中。为此,我们有一个中继器,其中包括一个绑定到可用选项列表的下拉列表。

也就是说,用户可以进行选择,选择他的选项并保存到他的购物车。

出现并导致错误的情况是:稍后用户返回,拉起他的购物车。也许他的选择在当前可用的选项列表中不再可用。在前端,我们不仅以声明方式绑定下拉列表的可用选项列表,还绑定了 SelectedValue。当 SelectedValue 在当前可用项目列表中不存在时,我们会在数据绑定期间收到错误。

在这种情况下的解决方案是不以声明方式绑定所选项目,而是处理转发器的 OnDataBound 事件并尝试在那里设置下拉列表的 SelectedValue - 我们可以在设置之前轻松检查先前选择的项目是否存在它,并在它不存在时按我们认为合适的方式处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    相关资源
    最近更新 更多