2012-01-13 101 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 
}