откуда asp.net знает, какое событие было запущено? - PullRequest
0 голосов
/ 30 января 2012

Я знаю о viewstate и dopostback и обо всем, я просто не знаю, куда идет ссылка на событие сработало. Скажем, вызывается button1.click, затем, когда страница проходит цикл обратной передачи, и затем выполняется page.load, тогда должно быть выполнено вызванное событие, но как asp.net узнает, какое это событие было?

Ответы [ 5 ]

2 голосов
/ 30 января 2012

Содержимое, отправленное с запросом, который создается, например, при нажатии кнопки, содержит имя элемента управления, вызвавшего событие. Далее я использовал инструмент чтения заголовков HTTP, который показывает информацию, отправленную в запросе HTTP, и проверил отправленные запросы, нажав две кнопки в веб-форме. Каждый запрос имеет различное значение, установленное для Button = в данных публикации под контентом.

http://localhost:1182/Pages/NewFolder1/WebForm1.aspx

POST /Pages/NewFolder1/WebForm1.aspx HTTP/1.1
Host: localhost:1182
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 548
__VIEWSTATE=viewstateblahblah&__EVENTVALIDATION=eventblahblah&**Button2=Button**
[..omitted parts for brevity..]
----------------------------------------------------------
http://localhost:1182/Pages/NewFolder1/WebForm1.aspx

POST /Pages/NewFolder1/WebForm1.aspx HTTP/1.1
Host: localhost:1182
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 548
__VIEWSTATE=blah blah state&__EVENTVALIDATION=viewstateblahblah&**Button1=Button**
[..omitted parts for brevity..]
----------------------------------------------------------

Обновление: Чтобы дополнить мой ответ, рассмотрите следующее содержимое, которое публикуется на сервере, когда два события отправляются на сервер одновременно (например, Button.Click and ComboBox.SelectedIndexChanged). _ VIEWSTATE = просмотр состояния зашифрованного бла-бла & _EVENTVALIDATION = проверка события зашифрованного бла-бла & DropDownList1 = Three & Button1 = Button

Таким образом, форма построена таким образом, что информация о событии добавляется в HTTP-запрос, отправляемый на сервер. Параметры содержат имена элементов управления, вызвавших событие, и я думаю, что все это зашифровано в параметре __EVENTVALIDATION, который гарантирует, что в событиях, которые были вызваны, и в элементах управления, которые их вызвали, не было никакого вмешательства. Это как хэш информации о событии.

2 голосов
/ 30 января 2012

Вы должны прочитать жизненный цикл страницы ASP.NET, чтобы понять, как возникают события в asp.net?Взгляните на эту статью - События в жизненном цикле страницы.

1 голос
/ 30 января 2012

Существуют скрытые поля, которые заполняются методом doPostback, эти скрытые поля содержат элемент управления, по которому был выполнен щелчок, и различные аргументы события, которые отправляются обратно в форму, а затем декодируются на стороне сервера.

Прочитайте это:

http://wiki.asp.net/page.aspx/1082/dopostback-function/

1 голос
/ 30 января 2012

Элементы управления, которые вызывают события в обратных передачах, должны реализовывать IPostBackEventHandler и определять метод RaisePostBackEvent ().Страница попытается найти элемент управления по его идентификатору, в противном случае вы должны зарегистрировать элемент управления как требующий событие, используя RegisterRequiresRaiseEvent.

. Подробнее об этом можно прочитать по адресу:

0 голосов
/ 30 января 2012

Это просто HTML!

Каждый элемент управления ASP.NET отображается как HTML. Кнопка отображает HTML <input name="button1" type="submit" /> в элементе <form>. Когда кнопка нажата, веб-браузер отправляет форму на URL обратной ссылки вместе со всеми переменными формы. Одной из этих переменных будет «button1», которая сообщает ASP.NET, что кнопка1 была нажата, и ASP.NET запускает событие button1.Click.

Обратите внимание: в веб-браузере пользователя не задействовано волшебство ASP.NET. Нажатие кнопки на странице ASP.NET ничем не отличается от кнопки на странице PHP или ColdFusion. Все в конце браузера просто HTML. Браузер просто отправляет форму на сервер, где ASP.NET (или PHP, или ColdFusion) получает запрос и определяет из переменных формы, какие элементы формы были изменены и / или какая кнопка была нажата.

Поиграйте с этой простой демонстрационной страницей с кнопками HTML, чтобы увидеть, как работают кнопки HTML: http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_form_submit

События ASP.NET

Короче говоря, когда вы разрабатываете свою страницу в Visual Studio, где-то есть строка кода, которая регистрирует ваш обработчик кликов для события button1.Click. Это будет выглядеть примерно так: Button1.Click += new EventHandler(this.GreetingBtn_Click);. Если на ваших страницах используется AutoEventWireup, то этот код генерируется автоматически за вашей спиной.

В любом случае, когда ASP.NET получает сообщение в форме HTML, содержащее button1, он знает, что нужно запустить событие button1.Click. Ваш обработчик событий вызван, потому что он был предварительно зарегистрирован, как указано выше, который хранит ссылку на метод обработчика событий в списке. Каждое событие имеет список методов для вызова при его запуске. Вы можете зарегистрировать несколько обработчиков для одного события. Каждый предварительно зарегистрированный метод вызывается при возникновении события.

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