大家好,又见面了,我是你们的朋友全栈君。
@ Page 里面的属性是ASP.NET页面中最基础的组成部分。可也包涵了很多麻烦在里面,因为种种原因导致必须研究一下这个属性AutoEventWireup
AutoEventWireup 用我的理解方式是这样:(Auto解释是自动,Event解释是事件,Wire解释关联结构模式,up解释是在上面)
个人理解的方式来推断这个属性所实现的功能。
首先,从浏览器触发的事件不能理科在本地得到处理,而是post至服务器上,因此,ASP.NETt建立了委托(代理)机制。在建立一个事件的同时,建立相应的委托:
private void initializeComponent()
{
this.mybutton.Click+=new System.EventHandler(this.Button1.Click); //委托
}
private void Button1_Click(object sender,System.Eventargs e)
{
//事件内容
}
委托将事件与该页面显式关联,在Autoeventwireup=”false”时,如果没有委托,事件将不执行。
Autoeventwireup=”true”,使页面与某些特殊的事件绑定,自动识别这些具有特定名称的事件,而不需要进行委托。这些特定的名称包括:Page_Init,Page_Load,Page_DataBind,PagePreRender和Page_Unload。比如:
private void page_Load(object sender,System.EventArgs e)
{
//事件内容
}
针对这些事件方法,开发人员可以利用该参数避免编写过多的链接代码。如果该属性设置为“false”则代码应改为:
private void InitializeComponent()
{
this.mybutton.Click+=new System.EventHandler(this.Button1_Click);//委托
this.Load += new System.EventHandler(this.page_Load);//可以用AutoEventwireup属性避免委托
}
private void page_Load(object sender,System.Eventargs e)
{
//事件内容
}
private void Button1_Click(object sender,System.Eventargs e)
{
//事件内容
}
一定不可以在没有委托的情况下使用page_Load类似的方法!
大部分情况下,页面不需要关联如此多的特殊事件,会增加额外的操作和系统开销。
同时,ASP.NET页框架自动调用事件处理的方法基于其预定名称,这会导致到同样的事件处理方法当页运行被调用两次,也会增大系统开销。
Microsoft 建议始终将AutoEventWireup设置为“False”
如果 Page 指令的 AutoEventWireup 属性被设置为 true(或者如果缺少此属性,因为它默认为 true)
当AutoEventWireup为true时,html中服务端脚本才被执行,结果才会出来在页面!
反过来说,当AutoEventWireup为false时,却有它的好处,为什么? 当然就是因为我们常常用的后代码技术,如果当AutoEventWireup为true时,页面会执行两次,.net环境会执行一次来运行html中包含的服务器端脚本,另外一次来执行后代码中的各个函数。
例:写一个asp.net页面(包含服务端脚本)
<@ Page language=c# AutoEventWireup=”false” Inherits=”Chapter3.ch21″ %>
<html>
<script language=c# runat=server>
void Page_Load(object sender, EventArgs e)
{
lblMessage.Text=”<a href=’http://techmango.com’>Thinking in Techmango.com</a>”;
}
</script>
<body>
<form runat=server>
<asp:label id=lblMessage runat=server />
</form>
</body>
</html>
运行后结果什么都不显示,当然就是因为AutoEventWireup被设置成“false”。
此文章内容参考了很多网上博客的文章;
感谢博客园id:钱途无梁
感谢doc88作者:fuqifalilu
感谢搜狐博客ID:累了的候鸟
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140501.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...