Выпадающее список выбранного значения не работает
В моем проекте 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>
Мне только нужно было внести небольшие изменения в код, и все работало лучше.