ASP.NET:DropDownList中的DataValueField

时间:2012-09-28 13:09:45

标签: c# asp.net

我正在尝试创建两个下拉列表,第一个包含用户列表,第二个只在我单击确定按钮时显示,显示用户的帐户列表。 aspx页面包含以下代码:

User:
<asp:SqlDataSource id="sourceUsers" runat="server" ConnectionString="<%$ ConnectionStrings:ct2012 %>"
    SelectCommand="SELECT name, id FROM users" />
<asp:DropDownList id="codUsers" runat="server" DataSourceID="sourceUsers"
    DataTextField="name" DataValueField="id" AutoPostBack="true" >
</asp:DropDownList>
<br />
Conto:
<asp:SqlDataSource id="sourceAccounts" runat="server" ConnectionString="<%$ ConnectionStrings:ct2012 %>" />
<asp:DropDownList id="accUsers" runat="server" DataSourceID="sourceAccounts"
    DataTextField="code" DataValueField="id" Visible="false" >
</asp:DropDownList>
<br />
<asp:Button ID="btOK" text="OK" OnClick="cmdNew_Click" runat="server" />

处理按钮事件的c#代码是:

protected void cmdNew_Click(object sender, EventArgs e)
    {
        sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" + codUsers.DataValueField;
        accUsers.Visible = true;
    }

问题是codUsers.DataValueField返回字符串“id”而不是索引的值....

6 个答案:

答案 0 :(得分:3)

使用:

`codUsers.SelectedValue` instead of  `codUsers.DataValueField`

或者

codUsers.SelectedItem.Value

或者

codUsers.Items[codUsers.SelectedIndex].Value

答案 1 :(得分:3)

尝试

codUsers.SelectedValue;

这个适合你。

答案 2 :(得分:1)

尝试使用codUsers.SelectedValue;

sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" + 
codUsers.SelectedValue;

您正在为可能的SQL Injection tho做好准备。 (也许不是在这种特殊情况下,因为你得到的是一个预先定义的值,但是假设这个值来自一个文本框,你会更好地使用参数化查询:

 string myVariable = someTextBox.Text;
 string sqlString = "Select something from someTable where someField=@someVariable";
 oCmd.Parameters.AddWithValue("@someVariable", myVariable);

答案 3 :(得分:1)

应该是.SelectedValue财产。

所以SelectCommand将如下:

sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" + 
                                codUsers.SelectedValue;

DataValueField将在分配值字段时用于DropDownList。

DataTextField用于文字字段。

答案 4 :(得分:1)

codUsers.DataValueField 字符串id,您在此处设置:DataValueField="id"

您要找的是codUsers.SelectedValue

请注意,对SQL语句使用字符串连接是一个非常坏主意。 Google的快速搜索“ADO .NET参数化查询”出现了an old tutorial on the subject。自从我使用普通的ADO.NET进行数据访问以来已经有一段时间了,但我确信还有很多信息。

基本上,您希望使用查询参数工具来构建查询,而不仅仅是字符串连接。 (两者都是出于SQL注入的原因和出于性能原因,以及一般都是更干净的代码。)虽然我建议更进一步,使用LINQ to SQL或Entity Framework等数据访问,这背后为您进行参数化场景,只是给你一个对象模型,而不是直接数据库访问。

答案 5 :(得分:0)

仅限使用

codUsers.SelectedItem.Text

它将返回,因为它是dropdownlist字段数据