2012-01-13 103 views
2

當我在下拉列表中選擇一個值時,我會得到一個回傳,並且即使在回發之後,我選擇的值也會被選中。我如何獲得默認值,< - 在回發之後再次選擇City - >作爲選定值?Dropdownlist回發到默認選定值?

HTML:

<asp:DropDownList ID="ddlCity" Width="200px" runat="server" AutoPostBack="true" 
OnSelectedIndexChanged="ddlCity_SelectedIndexChanged"> </asp:DropDownList> 

標記:

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataTable CityMembersTable = GetCity(); 
    ddlCity.DataSource = CityMembersTable; 
    ddlCity.DataTextField = "CityName"; 
    ddlCity.DataValueField = "CityID"; 
    ddlCity.DataBind(); 

    ddlCity.Items.Insert(0, new ListItem("<--Choose City-->", "")); 
} 

protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (ddlCity.SelectedValue == "") 
    { 
     return; 
    } 

    ddlCity.SelectedValue == "0"; //Dose not work... 
} 
+1

現在爲什麼你需要嗎?看看代碼它似乎不太可能它會被加載綁定,你不會得到您選擇的值 – V4Vendetta 2012-01-13 10:03:35

+1

我懷疑'ddlCity_SelectedIndexChanged'永遠不會調用,因爲您正在page_load中_every_回發中重新綁定DropDownList。把它包裝在一個'if(!Page.IsPostBack){...}' – 2012-01-13 10:03:59

回答

6

您需要首先在頁面加載時處理IsPostBack,因爲您在頁面加載時綁定了下拉菜單。此外,如果您的if條件執行,ddlCity.SelectedValue == "0";將不會執行。

protected void Page_Load(object sender, EventArgs e) 
{ 
     if(Page.IsPostBack == false) 
     { 
     DataTable CityMembersTable = GetCity(); 
     ddlCity.DataSource = CityMembersTable; 
     ddlCity.DataTextField = "CityName"; 
     ddlCity.DataValueField = "CityID"; 
     ddlCity.DataBind(); 

     ddlCity.Items.Insert(0, new ListItem("<--Choose City-->", "")); 
     } 
} 


protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ddlCity.SelectedIndex = 0; //Put this here 
    if (ddlCity.SelectedValue == "") 
    { 
     return; 
    } 
} 
+1

謝謝!很棒! – user1007103 2012-01-13 10:18:13

0

如果這是您要的 「0」 比較ddl.SelectedValue你確切的代碼。 相反,您想使用賦值運算符= not ==。

如果它仍然不起作用。嘗試ddlCity.SelectedIndex = 0;

2

嘗試使用SelectedIndex = 0代替SelectedValue。綁定數據後,您在位置0處添加了值。

這也是最好添加額外的檢查在Page_Load如果請求被綁定數據源之前回傳:

if (!Page.IsPostBack) 
{ 
    //bind data 
}