簡體   English   中英

ASP.NET:DropDownList中的DataValueField

[英]ASP.NET: DataValueField in DropDownList

我正在嘗試創建兩個下拉列表,第一個具有用戶列表,第二個僅當我單擊“確定”按鈕時顯示,該列表顯示該用戶的帳戶列表。 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”而不是索引值。

采用:

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

要么

codUsers.SelectedItem.Value

要么

codUsers.Items[codUsers.SelectedIndex].Value

嘗試

codUsers.SelectedValue;

這應該為您工作。

嘗試使用codUsers.SelectedValue;

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

您正在為可能的SQL注入設置自己。 (在這種情況下可能不是這樣,因為您得到的是預定義的值,但是可以說該值來自文本框,使用參數化查詢會更好:

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

它應該是.SelectedValue屬性。

因此,SelectCommand將為:

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

在將值字段分配給DropDownList時將使用DataValueField

文本字段的DataTextField

codUsers.DataValueField 在此處設置的字符串idDataValueField="id"

您正在尋找的是codUsers.SelectedValue

另請注意,對您的SQL語句使用字符串連接是一個非常糟糕的主意。 Google快速搜索“ ADO .NET參數化查詢”,發現了有關該主題的舊教程 自從我使用普通的ADO.NET進行數據訪問以來已經有一段時間了,但是我敢肯定那里仍然有很多信息。

基本上,您想使用查詢參數工具來構建查詢,而不僅僅是字符串串聯。 (出於SQL注入的原因和出於性能的原因,以及一般來說都是更簡潔的代碼。)盡管我建議更進一步,並使用諸如LINQ to SQL或Entity Framework之類的方法進行數據訪問,但這在后面為您參數化場景,並簡單地為您提供要使用的對象模型,而不是直接訪問數據庫。

僅使用

codUsers.SelectedItem.Text

它將作為下拉列表字段數據返回

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM