Выпадающее список выбранного значения не работает

В моем проекте ASP.NET. У меня есть два раскрывающегося списка и флажок. Когда флажок установлен, выбранное значение DropDownList1 должно быть таким же, как selcted value DropDownList2. Но DropDownList1.SelectedValue не работает.

Вот мой код:

protected void chkSameBAddress_CheckedChanged(object sender, EventArgs e)
{
    try
    {
        if (this.chkSameBAddress.Checked == true)
        {

          this.txtcSAddress1.Text=  this.txtcBAddress1.Text;
          this.txtcSAddress2.Text = this.txtcBAddress2.Text;
          this.txtcSAddress3.Text = this.txtcBAddress3.Text;
          this.txtcSAddress4.Text = this.txtcBAddress4.Text;
          this.txtcSCity.Text = this.txtcBCity.Text;
          this.txtcSPostCode.Text = this.txtcBPostCode.Text;
          this.txtcSState.Text = this.txtcBState.Text;

          this.ddlcSCountry.Items.FindByValue(ddlcBCountry.SelectedItem.Value).Selected = true;


        }

    }
    catch (Exception ex)
    {
        logger.Error(ex.Message);
        throw;

    }
}

Как видно из приведенного выше примера, если отмечен chkSmaeBAddress, то выбранное значение ddlcCountry должно совпадать с выбранным значением ddlcBCountry.

Ответ 1

Где вы привязываете данные к этим элементам выпадающего списка? Они должны быть связаны только при начальной загрузке страницы следующим образом. Я подозреваю, что вы привязываете их к каждой загрузке страницы, и поэтому выбранные значения исчезают.

protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        //Please check if you are binding checkbox controls here. 
        //If not bring them in here
    }
}

Другим условием является то, что как ddlcCountry, так и ddlcBCountry могут иметь одинаковые значения, которые можно выбрать. В противном случае ddlcSCountry.Items.FindByValue(ddlcBCountry.SelectedItem.Value) будет иметь значение null и будет вызывать ошибку при попытке установить свойство Selected

Если оба вышеуказанных условия в порядке, ваш код должен работать.

РЕДАКТИРОВАТЬ Извините, мой комментируемый код должен проверять привязку элементов управления выпадающего списка, а не флажок. поэтому он должен быть как

//Please check if you are binding both dropdown list controls here. 
//If not bind them within the if (!Page.IsPostBack)

Поместите контрольную точку в строку if (this.chkSameBAddress.Checked == true) внутри CheckedChanged event и увидите, что она выполняется, а затем значения времени выполнения...

Ответ 2

Неужели вы пытаетесь сделать выпадающие окна равными?

использование

ddlcSCountry.SelectedIndex = ddlcSCountry.FindStringExact(ddlcBCountry.Text);

В этом списке будет выбран параметр соответствия, а не только текст в поле, что очень полезно, если у вас есть базовые значения с вашими текстовыми параметрами.

Ответ 3

Принятое решение является очевидным решением самой распространенной причины, однако есть еще одна удивительная проблема, которая может вызвать это.

Значения моих списков были получены из базы данных, а значения имели возврат строки и возврат каретки из значений базы данных: \r\n. Эти ценности выглядят как невинное пространство, но на самом деле это не так!

Мое решение состояло в том, чтобы удалить эти скрытые значения Char. Надеюсь, что это поможет.

Ответ 4

Попробуйте это для выбора

ddlcSCountry.Text=ddlcBCountry.SelectedItem.Value;

Будет выбран нужный элемент

Ответ 5

Убедитесь, что для параметра chkSameBAddress.AutoPostBack установлено значение true. Если он установлен и по-прежнему не работает, подумайте об использовании элемента управления UpdatePanel или переместите эту логику клиенту с помощью JavaScript.

Ответ 6

Убедитесь, что AutoPostBack установлен в true в свойствах DropDownList.

Ответ 7

Я просто переключаюсь на использование <select runat="server" id="test1"></Select> Мне только нужно было внести небольшие изменения в код, и все работало лучше.