簡體   English   中英

單擊搜索按鈕時,在下拉列表中傳遞第一個值

[英]Passing first values in drop down list when clicking search button

我有一個ASP按鈕和四個下拉列表,這些列表是從數據庫動態填充的。 單擊按鈕時,應該將下拉列表中的選定值傳遞給SQL存儲過程。 而是傳遞每個下拉列表中的第一個值,而不是選定的值。 這是aspx頁面上的代碼:

<asp:DropDownList runat="server" ID="ddlCountry" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlTypeStructure" AppendDataBoundItems="True">
 </asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlCategory" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlSegment" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:Button runat="server" ID="btnSearhProjects" Text="Go" 
    CausesValidation="False" onclick="btnSearhProjects_Click" UseSubmitBehavior="False" />

以下是該按鈕的C#代碼:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindCountries();
            BindCategories();
            BindSegments();
            BindStructures();

        }



    }
public void SearchProjects()
    {
        Project project = new Project();
        string country = ddlCountry.SelectedItem.Text;
        string category = ddlCategory.SelectedItem.Text;
        string segment = ddlSegment.SelectedItem.Text;
        string structure = ddlTypeStructure.SelectedItem.Text;
        List<Project> projectList = project.GetProjects(country, category, segment, structure);
        gvProjects.DataSource = projectList;
        gvProjects.DataBind();
    }

    protected void btnSearhProjects_Click(object sender, EventArgs e)
    {
        SearchProjects();
    }

這就是我填充每個下拉列表的方式:

public void BindCountries()
    {
        List<Country> countryList = new List<Country>();
        Country country = new Country();
        countryList = country.GetCountries();

        ddlCountry.DataTextField = "CountryName";
        ddlCountry.DataValueField = "CountryID";
        ddlCountry.DataSource = countryList;
        ddlCountry.DataBind();

    }

我嘗試使用ddlCountry.SelectedValue.TextddlCountry.SelectedItem.Value ,它們不起作用。 任何幫助將不勝感激。 謝謝。

Page_Load事件的if (!IsPostBack)代碼塊中設置一個斷點(或某些調試語句),以確保單擊按鈕后未執行該斷點。

還要確保DropDownList ListItems的value屬性都是唯一的,否則它將設置為第一個重復的值。

問題是頁面加載尚未運行-因為這些是動態創建的,因此不會在回發時設置。

您也可以將這些值存儲在viewstate中,但是似乎您已關閉頁面的viewstate。 (在動態頁面上,Viewstate 可能是一個問題,但是您需要解決這個問題。)

有幾種方法可以執行此操作,但我會為您提供一個簡單的答案,請嘗試執行此操作並報告該操作是否成功。Autopostback設置為false可能會導致此問題,禁用viewstate也會導致此問題

將值存儲在ViewState或Session變量中,或者根據需要創建受保護的屬性

假設您正在綁定數據,

有DataBound事件,該事件在數據綁定到下拉列表之后觸發。 當您將dataSource分配給dropwdwon時,在將所有行綁定到dropdown之后需要選擇項目

var selectedValue string.Empty;
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
   selectedValue = ddlCountry.SelectedValue; // store it in some variable
}

您還可以獲取DropDownList的ListItem並使用foreach來查看選擇了哪些Item ..請確保在Page_Load的if(IsPostBack)中執行此操作,請記住,單擊按鈕會觸發PostBack

foreach (ListItem item in ddlCountry.Items)
{
    if (item.Selected)
    {
        // TODO: Whatever you are doing with a selected item.
    }
}

您可以刪除AppendDataBoundItems =“ true”。

DropDownList AppendDataBoundItems(第一個項目為空白,沒有重復項)

<asp:DropDownList runat="server" ID="ddlCountry">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlTypeStructure">
 </asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlCategory">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlSegment">
</asp:DropDownList>
&nbsp;
<asp:Button runat="server" ID="btnSearhProjects" Text="Go" 
    CausesValidation="False" onclick="btnSearhProjects_Click" UseSubmitBehavior="False" />

我找到了解決我問題的方法。 我的母版頁上有一個額外的form標記,其中帶有method="post" 這導致頁面發回自身。 刪除表單標簽后,便可以正確使用下拉列表了。 謝謝。

暫無
暫無

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

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