В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:314809
Проблема
В определенных обстоятельствах, ASP.NET вызывает изменение событий для веб-узла ASP.NET элемента управления, даже в том случае, если элемент управления не следует изменять.
Причина
Некоторые управления, такие какSelectedIndexChangedсобытия вУправления DropDownListэлемент управления илиTextChangedсобытия вTextboxэлемента управления, зависит от регистрации события Change для использования состояния представления. Возникли проблемы при создании этих элементов управления динамически после подключить событие.

ASP.NET отображает страницу в обозреватель, динамически созданные элементы управления не имеют соответствующего события изменения. Так как событие не существует, ASP.NET не сохраняет состояние представления. Это называется Оптимизация состояния просмотра.

При отправке страницы обратно и подключить события, ASP.NET предполагает наличие состояния представления, но обнаружил, что не существует. Это различие запускает событие изменения, даже в том случае, если элемент управления не были изменены.
Решение
Убедитесь, что подключить событие Change для динамически созданных элементов управления, прежде чем ASP.NET отображает страницу. Это гарантирует, что находится в состоянии представления для элемента управления.
Статус
Такое поведение является особенностью данного продукта..
Дополнительная информация

Действия по воспроизведению поведения

Создание веб-формы

  1. Создание нового приложения Visual Basic ASP.NET с именем ChangeFired.
  2. В режиме конструктора, откройте WebForm1. ПеретаскиваниеDataListэлемент управления,Кнопкаэлемент управления иНабор данныхУправление на форму.
  3. В диалоговом окнеДобавление набора данныхдиалоговое окно, нажмите кнопкуНетипизированный набор данныхи выберите командуOk.. Сохранить имена по умолчанию для всех элементов управления.
  4. Изменяет коллекцию таблиц для DataSet1. Добавьте новую таблицу с именем Table1.
  5. Изменение коллекции столбцов для таблицы Table1. Добавьте новый столбец с именем Столбец1.
  6. затем –DataList1, а затем изменитеИсточник данныхСвойствоDataSet1.
  7. Щелкните правой кнопкой мышиDataList1, выберите пунктИзменение шаблонаи выберите командуШаблоны элементов. ПеретаскиваниеУправления DropDownListэлемент управленияШаблон элементав разделе.
  8. затем –DropDownList1, а затем добавьте пять элементов коллекции Items. ЗначениеTextиЗначение:свойства этих элементоводин,два,три,четыре, ипятьсоответственно.
  9. ЗначениеAutoPostBackСвойствоTrueдля DropDownList1.
  10. Изменяет коллекцию привязок данных для DropDownList1. Добавьте следующее выражение пользовательскую привязку кСвойства SelectedIndexСвойство:
    DataBinder.Eval(Container, "DataItem.Column1")					
  11. Переключитесь в представление HTML. ЗначениеTraceдля атрибутаTrueВ диалоговом окне@ Pageдирективы, как показано ниже:
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="ChangeFired.WebForm1" trace="true" %>					

Добавление файла кода программной части

  1. Щелкните правой кнопкой мыши файл WebForm1.aspx и нажмите кнопкуПерейти к коду.
  2. Добавьте следующий код вPage_LoadСобытие::
    DataSet1.Tables(0).Rows.Add(New Object() {"1"})DataSet1.Tables(0).Rows.Add(New Object() {"2"})DataSet1.Tables(0).Rows.Add(New Object() {"3"})DataSet1.Tables(0).Rows.Add(New Object() {"4"})If Not IsPostBack Then  DataBind()End IfDim objItem As DataListItemFor Each objItem In DataList1.Items  AddHandler CType(objItem.FindControl("DropDownList1"), _  DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged  If Not objItem.FindControl("DropDownList1") Is Nothing Then    Trace.Write("Added SelectedIndexChanged Handler")  End IfNext					
  3. Создать новыйПроцедура SubОписанная ниже процедураPage_Loadдля обработки событияSelectedIndexChangedсобытия, как показано ниже:
    Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, _ByVal e As System.EventArgs)  DataBind()  Trace.Write("SelectedIndexChanged, DataBind()")  'Uncomment the following code to resolve this problem.  'Dim objItem As DataListItem  'For Each objItem In DataList1.Items  '  AddHandler CType(objItem.FindControl("DropDownList1"), _  '  DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged  'NextEnd Sub					

Запуск образца

  1. Запустите страницу. Обратите внимание, что динамически созданныйУправления DropDownListэлементы управления содержат состояния просмотра сведений трассировки для элемента управления дерева.

    Это происходит из-за вызоваDataBindдинамически создает методУправления DropDownListэлементы управления, а также подключить обработчик событий послеDataBindвызовPage_LoadСобытие:. Поскольку элементы управления обработчик событий состояния просмотра оптимизация не выполняется.
  2. Нажмите кнопку на странице. Обратите внимание на то, что происходит обратный, а только код внутриPage_LoadЗапускает событие. Находится в состоянии представленияУправления DropDownListэлементы управления, так как обработчик событий связан с элементом управления.
  3. Измените значение в одном изУправления DropDownListэлементы управления. Обратите внимание, что происходит обратный. Кроме того, обратите внимание, что ASP.NET запускаетPage_Loadсобытия и выполняетсяDropDownList1_SelectedIndexChangedСобытие:.
  4. В диалоговом окнеDropDownList1_SelectedIndexChangedсобытие, вызовитеDataBindметод, чтобы создать новыйУправления DropDownListэлементы управления.

    ПосколькуSelectedIndexChangedсобытия не подключен к этим новымУправления DropDownListэлементы управления, ASP.NET использует Оптимизация состояния просмотра и не сохраняет состояние представления для новогоУправления DropDownListэлементы управления.
  5. Просмотр сведений трассировки для элемента управления дерева. Обратите внимание, чтоУправления DropDownListэлементы управления не имеют состояния представления.
  6. Нажмите кнопку на странице. Обратите внимание на то, что происходит обратный и обратите внимание, что выполняется ASP.NETPage_LoadСобытие:. Поскольку можно подключитьSelectedIndexChangedдля событияУправления DropDownListэлементы управления, ASP.NET предполагает наличие состояния представления, которые будут связаны с элементами управления.

    Тем не менее, поскольку состояние представления не существует, ASP.NET запускаетSelectedIndexChangedсобытия, даже если элемент не выбран.

Решение.

Чтобы устранить эту проблему, удалите метки комментария в кодеDropDownList1_SelectedIndexChangedсобытия так, чтобы подключить обработчики событий с помощью создаваемых элементов управления.
состояние представления

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 314809 — последний просмотр: 11/23/2010 04:16:00 — редакция: 2.0

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbdatabinding kbevent kbprb kbservercontrols kbstate kbwebforms kbmt KB314809 KbMtru
Отзывы и предложения