2008-10-28 3 views
1

У меня есть этот элемент управления 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); 
} 
+0

Можете ли вы опубликовать часть своего кода? – mattruma 2008-10-28 12:07:33

ответ

0

Как вы подтверждаете участие в мероприятии? Используете ли вы код для него:

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

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

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

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

+0

Спасибо за ответ Slace. Я назначаю его в пользовательском элементе управления * .ascx – 2008-10-28 12:18:43

0

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

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

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

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

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

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

Эндрю

1

Я видел подобное поведение, когда Javascript ошибка была введена на первый постбэк.

Я думаю, что видел это, когда первый обратный вызов вызвал отображение нового div (используя javascript, а не код), а div не был в HTML. Таким образом, «show (div)» javascript ссылается на отсутствующий объект.

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

Майкл

2

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

Смежные вопросы