asp.net如何知道发生了什么事件?

时间:2012-01-30 01:24:07

标签: asp.net events

我知道viewstate和dopostback以及所有内容,我只是不知道对被触发事件的引用在哪里。比如说,button1.click被触发,然后当页面经过回发周期,然后执行page.load时,必须执行raise事件,但是asp.net如何知道它是哪个事件?

5 个答案:

答案 0 :(得分:2)

您必须阅读ASP.NET的Page Life Cycle以了解如何引发asp.net中的事件?看看这篇文章 - Events in the Page Life Cycle.

答案 1 :(得分:2)

单击按钮时发出的请求发布的内容包含引发事件的控件的名称。在下文中,我使用了HTTP标头阅读器工具,该工具显示HTTP请求中发送的信息,并通过单击Web窗体上的两个按钮来检查发送的请求。每个请求在内容下的帖子数据中为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和 一个ComboBox.SelectedIndexChanged)。 _ VIEWSTATE =查看状态加密blah blah& _EVENTVALIDATION =事件验证加密blah blah& DropDownList1 = Three& Button1 = Button

因此,表单的构建方式是将事件信息添加到发布到服务器的HTTP请求中。参数包含引发事件的控件的名称,我认为所有这些都在__EVENTVALIDATION参数中加密,以确保在引发的事件和引发它们的控件中不会发生任何篡改。它就像事件信息的哈希。

答案 2 :(得分:1)

在回发中引发事件的控件必须实现IPostBackEventHandler并定义方法RaisePostBackEvent()。该页面将尝试使用其ID查找控件,否则您必须使用RegisterRequiresRaiseEvent将控件注册为需要事件。

您可以在以下网址了解更多相关信息:

答案 3 :(得分:1)

有一些隐藏字段由doPostback方法填充,这些隐藏字段包含被单击的控件,以及各种事件参数,这些参数将发布回表单,然后在服务器端进行解码。

阅读本文:

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

答案 4 :(得分:0)

它只是HTML!

每个ASP.NET控件都呈现为HTML。按钮在<input name="button1" type="submit" />元素内呈现HTML <form>。单击该按钮时,Web浏览器会将表单与所有表单变量一起提交到回发URL。其中一个变量是&#34; button1&#34;它告诉ASP.NET单击了button1并且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获取包含button1的HTML表单帖子时,它都知道触发button1.Click事件。您的事件处理程序被调用,因为它是如上所述预先注册的,它在列表中存储对事件处理程序方法的引用。每个事件都有一个触发事件时要调用的方法列表。您可以为一个事件注册多个处理程序。触发事件时会调用预先注册的每个方法。