[英]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
是在此處設置的字符串id
: DataValueField="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.