DropDown List сбрасывается на первый элемент и не возвращает выбранное значение - PullRequest
2 голосов
/ 01 марта 2011

Итак, у меня есть раскрывающийся список стран и раскрывающийся список состояний, который заполняется динамически в зависимости от выбранной страны. Когда я щелкаю страну, раскрывающийся список состояний заполняется очень хорошо, но проблема возникает, когда я щелкаю значение (состояние) из другого раскрывающегося списка, вместо того, чтобы сохранить выбранный элемент, список возвращается к первому элементу списка, а выбранное значение отсутствует. отображаются.

<td><asp:DropDownList ID="ddlState" runat="server"
    DataSourceId="dsStateList"
    DataTextField="state_nm"
    DataValueField="state_cd"
    OnSelectedIndexChanged="ddlState_SelectedIndexChanged"
    AutoPostBack="true"
    AppendDataBoundItems="true" 
    Width="160px" OnDataBound="ddlState_OnDataBound">
    </asp:DropDownList>
</td>

    <asp:DropDownList ID="ddlCountry" runat="server"
    DataSourceId="dsCountryList"
    DataTextField="COUNTRY_NAME"
    DataValueField="COUNTRY_CIA_ID"
    OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged"
    OnDataBound="ddlCountry_OnDataBound"
    AutoPostBack="true"
    AppendDataBoundItems="true" 
    Width="160px">
    </asp:DropDownList>


protected void ddlState_SelectedIndexChanged(object sender, EventArgs e)
{
    string comboStateCODE = ddlState.SelectedValue;
    dsCompanyListParam.Text = comboStateCODE;
    ddlCountry.DataBind();
    ddlState.DataBind();
}

protected void ddlState_OnDataBound(object sender, EventArgs e)
{
    ddlState.Items.Insert(0, "Please Select a State");
}
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
    ddlState.Items.Clear();
    dsStateList.SelectParameters["iCountryID"].DefaultValue = ddlCountry.SelectedValue;

    dsCompanyListParam.Text = ddlCountry.SelectedValue;
    Trace.Warn("ddlCountry_SelectedIndexChanged");

    ddlCountry.DataBind();
    ddlState.DataBind();

}
protected void ddlCountry_OnDataBound(object sender, EventArgs e)
{
    ddlCountry.Items.Insert(0, "Please Select a Country");
}

Ответы [ 4 ]

7 голосов
/ 01 марта 2011

Я предполагаю, что где-то в вашем Page_Load () вы вызываете метод, который заполняет раскрывающийся список ... вам нужно инкапсулировать это в блок IF! PostBack:

// somewhere in PageLoad()...
If(!IsPostBack)
{
    PopulateDropdown();
}

ИспользованиеСоглашение выше, раскрывающийся список будет заполняться только при первой загрузке страницы.Я подозреваю, что когда вы делаете выбор из другого раскрывающегося списка, AutoPostBack выполняет метод Page_Load () (как и должно быть) и снова заполняет раскрывающиеся списки.

Использование вышеуказанного соглашения должно помочь избежатьэто.

0 голосов
/ 03 марта 2011

Решено! Хорошо, просто так, чтобы любой, кто застрял с подобной проблемой и не мог найти другие области, чтобы посмотреть, вот как я решил эту глупую проблему. Прежде всего, я использовал хранимую процедуру, и эта процедура объединяет значения из двух полей. Я установил параметры Integer (4), которые я не заметил, что есть пара стран с кодами больше 4. Таким образом, в основном, он возвращает значение NULL selected, которое, в свою очередь, не будет генерировать никакого значения, так как мой метод onselectedindexchanged на основе выбранного значения и по какой-то причине NULL не обрабатывается. Так что да, проверьте свои сохраненные процы и данные параметров! : D Спасибо за ваше время!

0 голосов
/ 01 марта 2011

Я бы удалил ddlCountry.DataBind (); из события ddlState_SelectedIndexChanged . Я не понимаю, почему вам нужно сделать еще один DataBind там.

0 голосов
/ 01 марта 2011

Ваше раскрывающееся состояние установлено на Autopostback - возможно, что ваш код для заполнения раскрывающегося списка country выполняет снова при обратной передаче, что делает выбранное состояние недействительным, потому чтовыпадение страны было заселено

...