【问题标题】:ASP.NET SelectedValue which is invalid because it does not exist in the list of items. Parameter name: valueASP.NET SelectedValue 无效,因为它不存在于项目列表中。参数名称:值
【发布时间】:2012-11-29 15:18:41
【问题描述】:

DropDownList11 出现错误,提示“'DropDownList11' 的 SelectedValue 无效,因为它不存在于项目列表中。 参数名称:值”。其他带有 SQLDatasource 的下拉列表工作正常。我在编辑 DetailsView 中手动创建此下拉列表。一旦选择并单击更新,它将发送到 SQL Server。请帮助!这里是代码,

<EditItemTemplate>
                    <asp:DropDownList ID="DropDownList11" runat="server" SelectedValue='<%# Bind("Version") %>'>
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>Oracle 11g</asp:ListItem>
                        <asp:ListItem>Oracle 11g R2</asp:ListItem>
                        <asp:ListItem>Server 2008</asp:ListItem>
                        <asp:ListItem>Server 2008 R2</asp:ListItem>
                        <asp:ListItem>Server 2012</asp:ListItem>
                        <asp:ListItem>SQL Svr 2008 R2 SS%S</asp:ListItem>
                        <asp:ListItem>SQL Svr 2012 SS%S</asp:ListItem>
                    </asp:DropDownList>
                </EditItemTemplate>

【问题讨论】:

  • 什么是Version,你怎么看?
  • 这是在 中。 Version 是数据库表中的列名。
  • 问题是DropDownList没有DataSource,Bind不知道Version在哪里
  • 好的,如何在不使用 DataSource 的情况下解决这个问题?

标签: asp.net


【解决方案1】:

下拉列表中没有任何值(Oracle 11g、Oracle 11g R2、...)可以与您正在绑定的值匹配(SelectedValue='')。

从下拉列表中删除绑定并添加 asp 标签。将值绑定到它,您将看到您尝试绑定的值。这是标签的示例代码:

<asp:Label ID="Label1" runat="server" Text="<%# Eval("Version").ToString() %>"></asp:Label>

【讨论】:

  • 所以只需删除 SelectedValue=''。它似乎工作正常,在我单击更新后,它存储在 SQL Server 中。这样做对吗?
  • 是的,只是暂时删除此绑定并添加标签以查看您尝试绑定的值。然后你需要弄清楚为什么这个值没有出现在下拉列表中。我假设您需要向下拉列表添加其他值(版本)。
【解决方案2】:

我猜你正在绑定:

<%# Bind("Version") %>

并且 Version 的值不在您创建的列表中。我建议将其从您的代码中取出并查看它是否有效。如果是,那么您知道在尝试选择它之前需要检查该值并确保它在列表中。

【讨论】:

  • 我在 DetailsView 中查看了 editTemplate,确实看到了我在该 dropdownlist11 上创建的值列表。我不明白为什么即使我在那里看到价值也不存在?
  • 那么存储在“版本”字段中的值可能不在该列表中。尝试在其他地方打印该值。尝试@Gregor Primar 所说的尝试。这是我接下来要去的地方。
【解决方案3】:

就像错误所说,数据库中的“版本”值可能不在您指定的预定义值列表中。尝试暂时删除下拉列表,然后这样做:

<asp:TemplateField>
   <ItemTemplate><%#Eval("Version")%></ItemTemplate> 
</asp:TemplateField>

这样您就可以看到 Version 的值是什么,以确保您在下拉列表中拥有它。

【讨论】:

    猜你喜欢
    • 2015-11-02
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多