【问题标题】:'Sport' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value'Sport' 有一个无效的 SelectedValue,因为它不存在于项目列表中。参数名称:值
【发布时间】:2014-05-11 15:44:56
【问题描述】:

我是一般的编码新手,我有一个任务需要使用 Visual Studio 使用 ASP.net 和 C# 创建一个时事通讯网站(对不起,如果我弄错了一些行话,我是新手)

我遇到了上述错误,无法完全找出问题所在。

下面是编辑新闻页面的代码。正如您从 select 命令中看到的那样,我有 2 个 db 的内部连接。我想要一个下拉列表,以便作者可以选择当前在数据库中的一项运动,它被列为数字,如果他们不知道数字代表什么,这将无用。我能够使下拉列表正常工作,但是当我添加“SelectedValue”以便当作者选择一项运动时它会更新数据库,但是,这是我收到错误的时候。我在插入页面中有相同的代码字符串,它可以正常工作,因此将不胜感激:)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="editnews.aspx.cs" Inherits="admin_editnews" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
            <link href="../css/bootstrap.css" rel='stylesheet' type='text/css' />
        <link href="../css/style.css" rel='stylesheet' type='text/css' />
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:SqlDataSource ID="newseditrows" runat="server" 
            ConnectionString="<%$ ConnectionStrings:newsconnection %>" 
            SelectCommand="SELECT News.headline, News.Image, News.paragraph, Sports.sport, News.Sport, News.date, News.lead, News.authorID, Sports.id
                            FROM News 
                            INNER JOIN Sports ON News.Sport = Sports.id
                            ORDER BY date DESC"
            UpdateCommand="UPDATE [News] SET [headline]=@headline, [Image]=@Image, [paragraph]=@paragraph, [Sport]=@sport, [date]=@date, [lead]=@lead, [authorid]=@authorid WHERE [id]=@id">

            <UpdateParameters>
                <asp:Parameter Name="headline" Type="String" />
                <asp:Parameter Name="Image" Type="String" />
                <asp:Parameter Name="paragraph" Type="String" />
                <asp:Parameter Name="Sport" Type="Int32" />
                <asp:Parameter Name="date" Type="String" />
                <asp:Parameter Name="lead" Type="String" />
                <asp:Parameter Name="authorid" Type="Int32" />
                <asp:Parameter Name="ID" Type="Int32" />
            </UpdateParameters>
        </asp:SqlDataSource>

        <asp:SqlDataSource ID="sportlist" runat="server" 
            ConnectionString='<%$ ConnectionStrings:newsconnection %>' 
            SelectCommand="SELECT [id], [sport] FROM [Sports]">

        </asp:SqlDataSource>

        <asp:ListView ID="displayedit" runat="server"
            DataSourceID="newseditrows"
            DataKeyNames="id">

            <AlternatingItemTemplate>
                <span style="">id:
                    <asp:Label Text='<%# Eval("id") %>' runat="server" ID="idLabel" /><br />
                    headline:
                    <asp:Label Text='<%# Eval("headline") %>' runat="server" ID="headlineLabel" /><br />
                    Image:
                    <asp:Label Text='<%# Eval("Image") %>' runat="server" ID="ImageLabel" /><br />
                    paragraph:
                    <asp:Label Text='<%# Eval("paragraph") %>' runat="server" ID="paragraphLabel" /><br />
                    Sport:
                    <asp:Label Text='<%# Eval("sport") %>' runat="server" ID="SportLabel" /><br />
                    date:
                    <asp:Label Text='<%# Eval("date") %>' runat="server" ID="dateLabel" /><br />
                    lead:
                    <asp:Label Text='<%# Eval("lead") %>' runat="server" ID="leadLabel" /><br />
                    authorID:
                    <asp:Label Text='<%# Eval("authorID") %>' runat="server" ID="authorIDLabel" /><br />
                    <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
                    <br />
                <br />
                </span>
            </AlternatingItemTemplate>
            <EditItemTemplate>
                <span style=""><%--id:
                    <asp:Label Text='<%# Eval("id") %>' runat="server" ID="idLabel1" /><br />--%>
                    Headline:
                    <asp:TextBox Text='<%# Bind("headline") %>' runat="server" ID="headlineTextBox" /><br />
                    Image:
                    <asp:TextBox Text='<%# Bind("Image") %>' runat="server" ID="ImageTextBox" /><br />
                    Paragraph:<br />
                    <asp:TextBox Text='<%# Bind("paragraph") %>' runat="server" ID="paragraphTextBox" 
                                 TextMode="MultiLine" Columns="50" Rows="8"/><br />
                    <br />Sport:
                    <%--<asp:TextBox ID="SportTextBox" runat="server" Text='<%# Bind("Sport") %>' />--%>
                    <asp:DropDownList ID="Sport" runat="server" 
                                        DataSourceID="sportlist" 
                                        DataTextField="sport" 
                                        DataValueField="id"
                                        SelectedValue='<%# Bind("Sport") %>' >

                    </asp:DropDownList>
                    <br />
                    <%--date:
                    <asp:TextBox Text='<%# Bind("date") %>' runat="server" ID="dateTextBox" /><br />--%>
                    Lead:
                    <asp:TextBox Text='<%# Bind("lead") %>' runat="server" ID="leadTextBox" /><br />
                    <%--authorID:
                    <asp:TextBox Text='<%# Bind("authorID") %>' runat="server" ID="authorIDTextBox" /><br />--%>
                    <asp:Button runat="server" CommandName="Update" Text="Update" ID="UpdateButton" /><asp:Button runat="server" CommandName="Cancel" Text="Cancel" ID="CancelButton" /><br />
                    <br />
                </span>
            </EditItemTemplate>
            <EmptyDataTemplate>
                <span>No data was returned.</span>
            </EmptyDataTemplate>
            <InsertItemTemplate>
                <span style="">headline:
                    <asp:TextBox Text='<%# Bind("headline") %>' runat="server" ID="headlineTextBox" /><br />
                    Image:
                    <asp:TextBox Text='<%# Bind("Image") %>' runat="server" ID="ImageTextBox" /><br />
                    paragraph:
                    <asp:TextBox Text='<%# Bind("paragraph") %>' runat="server" ID="paragraphTextBox" /><br />
                    Sport:
                    <asp:TextBox Text='<%# Bind("sport") %>' runat="server" ID="SportTextBox" /><br />
                    date:
                    <asp:TextBox Text='<%# Bind("date") %>' runat="server" ID="dateTextBox" /><br />
                    lead:
                    <asp:TextBox Text='<%# Bind("lead") %>' runat="server" ID="leadTextBox" /><br />
                    authorID:
                    <asp:TextBox Text='<%# Bind("authorID") %>' runat="server" ID="authorIDTextBox" /><br />
                    <asp:Button runat="server" CommandName="Insert" Text="Insert" ID="InsertButton" /><asp:Button runat="server" CommandName="Cancel" Text="Clear" ID="CancelButton" /><br />
                    <br />
                </span>
            </InsertItemTemplate>
            <ItemTemplate>
                <span style="">id:
                    <asp:Label Text='<%# Eval("id") %>' runat="server" ID="idLabel" /><br />
                    headline:
                    <asp:Label Text='<%# Eval("headline") %>' runat="server" ID="headlineLabel" /><br />
                    Image:
                    <asp:Label Text='<%# Eval("Image") %>' runat="server" ID="ImageLabel" /><br />
                    paragraph:
                    <asp:Label Text='<%# Eval("paragraph") %>' runat="server" ID="paragraphLabel" /><br />
                    Sport:
                    <asp:Label Text='<%# Eval("sport") %>' runat="server" ID="SportLabel" /><br />
                    date:
                    <asp:Label Text='<%# Eval("date") %>' runat="server" ID="dateLabel" /><br />
                    lead:
                    <asp:Label Text='<%# Eval("lead") %>' runat="server" ID="leadLabel" /><br />
                    authorID:
                    <asp:Label Text='<%# Eval("authorID") %>' runat="server" ID="authorIDLabel" /><br />
                    <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
                    <br />
                <br />
                </span>
            </ItemTemplate>
            <LayoutTemplate>
                <div runat="server" id="itemPlaceholderContainer" style=""><span runat="server" id="itemPlaceholder" /></div>
                <div style="">
                    <asp:DataPager runat="server" ID="DataPager1">
                        <Fields>
                            <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False"></asp:NextPreviousPagerField>
                            <asp:NumericPagerField></asp:NumericPagerField>
                            <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False"></asp:NextPreviousPagerField>
                        </Fields>
                    </asp:DataPager>

                </div>
            </LayoutTemplate>
            <SelectedItemTemplate>
                <span style="">id:
                    <asp:Label Text='<%# Eval("id") %>' runat="server" ID="idLabel" /><br />
                    headline:
                    <asp:Label Text='<%# Eval("headline") %>' runat="server" ID="headlineLabel" /><br />
                    Image:
                    <asp:Label Text='<%# Eval("Image") %>' runat="server" ID="ImageLabel" /><br />
                    paragraph:
                    <asp:Label Text='<%# Eval("paragraph") %>' runat="server" ID="paragraphLabel" /><br />
                    Sport:
                    <asp:Label Text='<%# Eval("sport") %>' runat="server" ID="SportLabel" /><br />
                    date:
                    <asp:Label Text='<%# Eval("date") %>' runat="server" ID="dateLabel" /><br />
                    lead:
                    <asp:Label Text='<%# Eval("lead") %>' runat="server" ID="leadLabel" /><br />
                    authorID:
                    <asp:Label Text='<%# Eval("authorID") %>' runat="server" ID="authorIDLabel" /><br />
                    <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
                    <br />
                <br />
                </span>
            </SelectedItemTemplate>
        </asp:ListView>

    </div>
    </form>
</body>
</html>

【问题讨论】:

  • 您是否尝试过使用Eval 语句更改下拉列表SelectedValue?
  • 是的@HassanNisar,但是我仍然收到错误。
  • 你能添加错误描述吗?它说什么?
  • 好的抱歉,标题中提到了。我不确定 Bind 函数是否区分大小写,但您是否尝试过编写 Bind("sport") 而不是 Bind("Sport")
  • 也试过了,但仍然收到错误。我被难住了:/

标签: c# asp.net


【解决方案1】:

ListControl.SelectedValue: 获取列表控件中选定项的值,或选择列表控件中包含指定值的项。 (继承自 ListControl。) MSDN Reference.

您在此处尝试选择值字段中不存在的值。

SelectedValue='&lt;%# Bind("id") %&gt;' 应该可以工作。

<asp:DropDownList ID="Sport" runat="server" 
                                    DataSourceID="sportlist" 
                                    DataTextField="sport" 
                                    DataValueField="id"
                                    SelectedValue='<%# Bind("id") %>' >

【讨论】:

  • 您的真正意思是不要在设计器中这样做。这是处理 OnDataBinding 事件的有力案例。
  • 没有。您不一定要在 cs 文件中操作数据或处理 OnDataBinding 事件。下拉列表的标记足以从现有数据源中选择一个值。您只需选择一个存在于值字段中的值。
  • 我试过了,它允许我编辑下拉框的内容,但是当我点击更新时,我得到了一个新的错误。 Cannot insert the value NULL into column 'Sport', table 'C:\USERS\AARON\DOCUMENTS\PROJECT02\APP_DATA\NEWS.MDF.dbo.News'; column does not allow nulls. UPDATE fails. The statement has been terminated.
  • 然后当我在数据库本身中单击允许空值时,我没有收到任何错误,但是,数据库不会更新。
  • 你不能这样设置。您需要在 sql 语句中解析它或在后面的代码中处理它。
猜你喜欢
  • 2015-11-02
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多