2014-01-15 38 views
2

我有一個問題,我的按鈕和下拉列表,當我點擊按鈕,並在後面的代碼中調用一個方法,背後的代碼是不採取當前文本的下拉,但網站刷新後的文字。這樣做的ASPX代碼:代碼背後沒有從當前的文字下拉

<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager" EnablePageMethods="true" runat="server" /> 
<div> 
    <table runat="server" id="showDBTable"> 
     <tr> 
      <td> 
       <asp:Button ID="showDB" runat="server" OnClick="showDBContent" Text="Show database content" /> 
      </td> 
      <td> 
       <asp:DropDownList runat="server" ID="showDBDropDown" OnLoad="FindExistingMetaTag" /> 
      </td> 
     </tr> 
    </table> 
</div> 
</form> 

和後面的代碼:

protected void showDBContent(object sender, EventArgs e) 
{ 
    String queryString = ""; 
    if (showDBDropDown.Text == "Show all") 
    { 
     queryString = "SELECT * from dbo.Search"; 
    } 
    else 
    { 
     queryString = "SELECT * from dbo.Search where Tag = '" + (showDBDropDown.Text).TrimStart().TrimEnd() + "'"; 
    } 

如何解決呢?

編輯 - 根據要求:

protected void FindExistingMetaTag(object sender, EventArgs e) 
{ 
    String queryString = "SELECT TAG from dbo.Tags"; 
    List<String> tagsShow = new List<String>(); 
    tagsShow.Add("Show all"); 
    using (SqlConnection conn = new SqlConnection(info.connectionString)) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = queryString; 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       tagsShow.Add(reader.GetString(0)); 
      } 
     } 
    } 

    showDBDropDown.DataSource = tagsShow; 
    showDBDropDown.DataBind(); 
    showDBDropDown.SelectedIndex = 0; 
} 

我只注意到它可能是「showDBDropDown.SelectedIndex = 0;」,但它似乎並沒有改變任何東西將其刪除。

+0

你可以添加你FindExistingMetaTag邏輯是什麼? –

+0

@MatiasP向我們展示您的代碼,您正在填充您的'下拉列表' –

+0

我的假設是,當頁面進行回發時,下拉列表將被清除並重新填充,導致您丟失先前選擇的項目。您可能需要添加一些代碼檢查以確保列表不會在回發中重新實例化。 – MadHenchbot

回答

3

我認爲你需要從showDBDropDown刪除OnLoad屬性:首先加載這樣

<asp:DropDownList runat="server" ID="showDBDropDown" /> 

和填充的showDBDropDown的內容Page_Load方法:用yourDropdown.SelectedItem.Text

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindDropdowns(); 
    } 
} 

private void BindDropdowns() 
{ 
    String queryString = "SELECT TAG from dbo.Tags"; 
    List<String> tagsShow = new List<String>(); 
    tagsShow.Add("Show all"); 
    using (SqlConnection conn = new SqlConnection(info.connectionString)) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = queryString; 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       tagsShow.Add(reader.GetString(0)); 
      } 
     } 
    } 

    showDBDropDown.DataSource = tagsShow; 
    showDBDropDown.DataBind(); 
} 
+0

我不工作,仍然是相同的文字 – MatiasP

+0

看到我編輯的答案,希望它有幫助。 – ekad

+0

它做到了!非常感謝! – MatiasP

0

更新你的代碼或根據您的需要yourDropdown.SelectedItem.Value

if (showDBDropDown.SelectedItem.Text== "Show all") 
{ 
    queryString = "SELECT * from dbo.Search"; 
} 
else 
{ 
    queryString = "SELECT * from dbo.Search where Tag = '" +  
         (showDBDropDown.SelectedItem.Text) + "'"; 
} 

檢查here更多有關DropdownList

+0

我不工作,仍然是相同的文字 – MatiasP