Выпадающий список не публикуется назад после первого сообщения назад - PullRequest
1 голос
/ 28 октября 2008

У меня есть этот выпадающий элемент управления ASP.NET, который отображает другие элементы управления текстовым полем, когда значение не британское (это помогает найти адреса в Великобритании с помощью почтовых индексов). Когда Великобритания будет повторно выбрана, я хотел бы скрыть другие элементы управления. Я включил состояние просмотра и AutoPostBack в true. У меня есть событие onSelectedIndexChanged, которое срабатывает только один раз (когда значение раскрывающегося списка меняется на другую страну, так как по умолчанию это Великобритания).

Мне бы хотелось, чтобы OnSelectedIndexChanged срабатывал каждый раз, когда значение отличается, но это не так.

P.S. Вот фрагмент кода.

<asp:DropDownList runat="server" ID="Country2" AutoPostBack="True" OnSelectedIndexChanged="Country2_SelectedIndexChanged" DataSource="<%# RegionList %>" DataTextField="Name" DataValueField="Code" CssClass="dropdown country"></asp:DropDownList>


protected void Country2_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList d = (DropDownList)sender;
    addressEntry.CountryPrePostBack_SelectedIndexChanged(d.SelectedItem.Value);
}

Ответы [ 4 ]

2 голосов
/ 31 июля 2009

Каждый раз, когда у меня случалось что-то подобное, это происходило из-за контроля проверки. К этим дополнительным текстовым полям прикреплены валидаторы, которые могут подавлять обратную передачу? Быстрый способ определить это - установить CausesValidation = "false" в раскрывающемся списке.

1 голос
/ 16 ноября 2008

Я видел похожее поведение, когда при первом постбеке была введена ошибка javascript.

Кажется, я видел это, когда первый постбэк вызвал отображение нового div (используя javascript, а не code-behind), а div не было в HTML. Таким образом, JavaScript "show (div)" ссылается на отсутствующий объект.

Конечно, очень специфический случай, но я бы порекомендовал проверять наличие ошибок js после первого постбэка.

Michael

0 голосов
/ 07 ноября 2008

Я могу думать только о двух вопросах.

1.) Заполняете ли вы (привязку) к списку события page_load? если это так, то вам нужно сделать это только при первой загрузке страницы. Когда вы привязываетесь к элементу управления (или другим элементам управления), он сбрасывает выбранный индекс. Если viewstate включен, он сохранит исходный список. 2.) Теперь я не собираюсь предполагать, что вышеприведенное уже верно, поэтому я могу спросить, включено ли viewstate для родительского объекта этой страницы Если вы включите трассировку и посмотрите список управления страницами, вы сможете увидеть размер состояния просмотра для этого конкретного элемента. Если у него есть значение, то вы знаете, что вы правильно настраиваете viewstate. Если нет, то пройдите вверх по родительским элементам управления, чтобы увидеть, где заканчивается viewstate.

Viewstate необходимо для обнаружения обратной передачи, поэтому важно убедиться, что она работает правильно.

Теперь я программист VB.net и заметил, что в вашем сабвуфере, похоже, нет обработчика. В vb.net мы обычно видим что-то вроде

Private Sub LinkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton.Click

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

Andrew

0 голосов
/ 28 октября 2008

Как вы прикрепляете мероприятие? Используете ли вы это код, как:

this.dropDownList.SelectedIndexChanged += new EventHandler(dropDownList_SelectedIndexChanged);

Или вы назначаете его в ASPX / ASCX?

Если это первое, убедитесь, что вы не присваиваете его в условии !IsPostback, вам нужно убедиться, что событие добавляется при каждой обратной передаче.

Вы пытались использовать отладчик, чтобы увидеть, действительно ли происходит обратная передача в последующих событиях? Возможно, что новые добавленные вами элементы управления вызывают ошибку проверки, если вы используете средства проверки, убедитесь, что вы установили в раскрывающемся списке значение CauseValidation = false, поэтому оно будет отправляться каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...