[英]Not able to get the dropdown list selected value on button click in asp.net c#
我寫了一個簡單的 asp.net c# 代碼來獲取下拉列表的值。 但即使在選擇了一些值之后,我總是將值設為"--Select Vendor--"
這是代碼。
<asp:DropDownList ID="ddlVendorUploadData" runat="server" CssClass="form-control">
</asp:DropDownList>
<label>Vendor Name</label>
和后面的代碼。
protected void btnUploadData_Click(object sender, EventArgs e)
{
try
{
string strUserRole = ddlVendorUploadData.SelectedItem.Value;
}
}
按鈕點擊代碼是
<asp:Button ID="btnUploadData" runat="server" class="btn btn-danger button" Text="Submit"
OnClick="btnUploadData_Click" OnClientClick="return ValidateDropdownlist();" />
您沒有顯示填充下拉列表的代碼。 但是,這通常是由於您重新加載下拉列表而發生的。
總是,但總是把你的第一個 forms 加載代碼放在 IsPostBack = false 中。
任何回發,任何按鈕單擊都將始終再次運行頁面加載事件,並且每次都這樣做。
我真的希望存在一個名為 FirstPageLoad 的單獨事件。
所以,假設這個標記:
<asp:DropDownList ID="DropDownList1" runat="server" Width="164px"
DataValueField="ID"
DataTextField="HotelName" >
</asp:DropDownList>
<asp:Button ID="cmdTest" runat="server" Text="Test drop select value" OnClick="cmdTest_Click"
style="margin-left:35px"/>
請注意,我們有兩個值。 第一列是hotels表的隱藏pk“ID”。 然后我們有 HotelName 的“顯示”值。
因此,請確保您只加載數據源超過一次。 如果您每次都重新加載,那么即使單擊按鈕,頁面加載事件也會觸發,並且您的代碼會重新加載下拉菜單,並且在重新加載時您會丟失選擇。
因此,頁面加載代碼應如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadCombo();
}
void LoadCombo()
{
string strSQL =
@"SELECT ID, HotelName FROM tblHotelsA ORDER BY HotelName";
DropDownList1.DataSource = MyRst(strSQL);
DropDownList1.DataBind();
DropDownList1.Items.Insert(0, new ListItem("Select", ""));
}
請注意非常重要的 IsPostBack 測試/檢查。 由於頁面加載在每次回發時運行(例如,任何按鈕單擊),所以我們需要一個真正的首頁加載,我們在其中加載控件、網格並執行我們真正的頁面加載工作和設置。
因此,使用 IsPostBack 測試。
MyRst 只是一個方便的幫助程序,它返回一個數據表——我在我的應用程序中一遍又一遍地使用它。
該代碼是這樣的:
public DataTable MyRst(string strSQL)
{
DataTable rstData = new DataTable();
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
{
using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
{
cmdSQL.Connection.Open();
rstData.Load(cmdSQL.ExecuteReader());
}
}
return rstData;
}
因此,當我們運行時,我們會得到:
所以,在 select 之后,我們有這個測試按鈕代碼:
protected void cmdTest_Click(object sender, EventArgs e)
{
Debug.Print("Text property = " + DropDownList1.Text);
// best to use this MUCH LESS confusing
Debug.Print("Value property = " + DropDownList1.SelectedItem.Value);
Debug.Print("Text property = " + DropDownList1.SelectedItem.Text);
}
我喜歡總是使用 SelectedItem,然后獲取 Text 值(顯示)或隱藏的 Value 屬性(ID)。 請注意,如果您的 drop 沒有兩個值? 然后我建議將 DataValue 和 DataText 都設置為一個列名。
Output:
請注意文本屬性如何實際返回“值”設置。 您還可以使用
DropDownList1.Text = "16"
它會跳轉到並顯示文本值
因此,我們經常需要 select 部分或說酒店如上所述,但我們想獲得/擁有/使用/使用 PK 或隱藏列。
因此,請記住下拉菜單的 2 列功能。
並記住頁面加載事件 - 您需要將組合加載代碼放在 IsPostBack = false 存根中,否則您在每次回發時重新加載下拉每次時間(例如每個按鈕單擊)。
如前所述,為了避免混淆,我總是使用 SelectedItem.Text 或 SelectedItem.Value,這樣可以減少這里的混亂。
首先,我知道這是不好的做法,但我沒有足夠的聲譽來發表評論,所以我不知道如何在沒有回答的情況下提出這個問題?
如果我們可以看到生成下拉數據的代碼,這將更容易回答。 但據我所知,可能存在三個問題:
.DataValueField = "Value";
) - 再次假設它是您想要的 Value 屬性數據。希望這些建議中的任何一個都可以幫助您解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.