2014-10-20 69 views
0

我一直被困在這個問題的時間,在網上搜索,但沒有解決方案,但尚未解決我的問題。我有一個下拉列表,它根據輸入到文本字段中的郵政編碼從我的數據庫中的表中檢索計劃名稱。我遇到的問題是:當我輸入郵政編碼時,計劃名稱在下拉列表中填充沒有問題,然後選擇其中一個計劃,當我進一步嘗試在其他具有autppostback的字段中輸入其他信息時= true,則下拉列表不保留其值始終選擇第一個值,我想要的下拉列表保留回傳後選擇的值,這裏是我的代碼:ASP.Net DropDownList保留來自數據庫的值 - AutoPostBack

step1.aspx

<p> 
    <asp:TextBox ID="txt_zip_code" runat="server" AutoPostBack="true"></asp:TextBox> 
</p> 
<p>  
    <asp:DropDownList ID="dd_dental_plan" runat="server" EnableViewState="true"> 
</asp:DropDownList> 

</p> 

第一步.cs

protected void Page_Load(object sender, EventArgs e) 
    { 

     using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CustomerDataConnectionString"].ConnectionString)) 
     { 
      using (SqlCommand sqlCmd = new SqlCommand()) 
      { 
       sqlCmd.CommandText = "SELECT * FROM [dbo].[mfd_plans] WHERE zip_code = @zipCode"; 
       sqlCmd.Parameters.AddWithValue("@zipCode", txt_zip_code.Text); 

       sqlCmd.Connection = conn; 
       conn.Open(); 
       SqlDataAdapter da = new SqlDataAdapter(sqlCmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       dd_dental_plan.DataSource = dt; 
       dd_dental_plan.DataValueField = "plan_id"; 
       dd_dental_plan.DataTextField = "plan_name"; 
       dd_dental_plan.DataBind(); 
       conn.Close(); 
       dd_dental_plan.Items.Insert(0, new ListItem("Please select plan", "0")); 
      } 
     } 
+0

添加代碼'的IsPostBack()' – 2014-10-20 04:11:15

+0

我做到了,但沒有奏效。如果我再次嘗試並希望輸入不同的郵政編碼,則不會刷新下拉列表。 – user3345212 2014-10-20 04:14:27

+0

爲什麼你在'page_load'中添加這段代碼。有什麼特別的原因嗎?如果沒有,那麼做一件事從'page_load()'中刪除你的代碼'爲它添加一個方法,然後在輸入郵編時調用方法。 – 2014-10-20 04:17:35

回答

2

你應在您的aspx頁面上使用更新面板,以防止從其他字段發生自動回送時發生整頁加載。 只需在頁面上放置一個asp:scriptmanager控件。將您的郵政編碼和下拉列表放入更新面板並將其他控件放置在單獨的更新面板中,並通過該郵箱發回。你的代碼看起來像這樣。

<asp:ScriptManager runat="server"> 
    </asp:ScriptManager> 
    <div> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <p> 
      <asp:TextBox ID="txt_zip_code" runat="server" AutoPostBack="true"></asp:TextBox> 
     </p> 
     <p>  
      <asp:DropDownList ID="dd_dental_plan" runat="server" EnableViewState="true"> 
      </asp:DropDownList> 

     </p> 
    </ContentTemplate> 
    </asp:UpdatePanel> 

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
      another controls which caused postback event 
    </ContentTemplate> 
    </asp:UpdatePanel> 
    another controls which don't cause postback. 
</div> 

希望這將作品。 enter code here

感謝

0

嗯我真的很希望我正確地理解你的問題.. 您是否嘗試過類似

if (!Page.IsPostBack) 
    {// All the code that you've written above ..} 

,並做一切你,你在Page_Load中寫代碼... 試試看......

+0

您好先生,謝謝您的建議,不幸的是,當我嘗試輸入不同的郵政編碼時(它不會刷新下拉列表) – user3345212 2014-10-20 04:36:34

+0

每次你回發你的DropDownList將被重新填充。一種方法是使用jquery/javascript將下拉菜單中當前選定的值存儲在客戶端的隱藏字段中,並在服務器端的回發期間使用它來設置選定的值。有點黑客,但應該工作。讓我知道你是否想要這個代碼。 – Chris 2014-10-20 10:51:16

相關問題