这句代码是自动生成的,在代码的第一句,那么你理解这个 意思吗?

下面,着重说一下AutoEventWireup。大家可能不太注意这个,系统自动生成的一般我们情况下不用考虑,下面我们通过一个例子看一下这到底是什么?

如下是一个简单的计算机例子,三个Textbox控件,两个Label,一个Button组成。在这里我们的AutoEventWireup的值为True。

我们看一下代码:

namespace ASP.NET
{public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){          this.TextBox1.Text = "1";this.TextBox2.Text = "2";                                  }protected void Button1_Click(object sender, EventArgs e){double a, b, c;try{a = double.Parse(this.TextBox1.Text);b = double.Parse(this.TextBox2.Text);}catch {Response.Write("只能输入数字");return;                    }c = a + b;this.TextBox3.Text = c.ToString();}}
}

我们在Page_Load事件中给Textbox1和Textbox2都赋值了,下面我们运行一下:

根据我们设定的结果出现了,现在我们把AutoEventWireup的值设为False看看

其他代码全不变,运行结果:

思考1,为什么Textbox1和Textbox2没有被赋值?

咱们现在把AutoEventWireup的值改为True,其他代码不变,相加一个试试,运行结果:

输入8+8点击求和,可以看到如下页面:

不论输入多少次结果总是1+2=3。

思考2,为什么相加结果不变?如何修改可以得到我们想要的结果?

现在我们就回答以上的两个问题。

1.在AutoEventWireup为False的情况下,Textbox1和Textbox2没有被赋值,则没有执行Page_Load方法,为什么?MSDN解释:AutoEventWireup 指示页的事件是否自动连网。如果启用事件自动连网,则为 true;否则为 false。简单来说就是Page指令的AutoEventWireup属性置为True时,该页框架将自动调用页事件,即Page_Load,Page_Init方法,这种情况下,不需要任何显示的Handles子句或委托。当AutoEventWireup为True是,Html中服务端脚本才被执行。

2.在AutoEventWireup为True的情况下,不论输入任何数运行结果总是1+2=3,因为AutoEventWireup为True时每次提交页面都会先执行行Page_Load方法,再执行控制的事件方法。从表面看,就是Page_Load成了aspx.cs文件中必须而且首先执行的方法。那么如何解决呢?有两种方法:(1)将AutoEventWireup置为False;(2)使用Page类的IsPostBack属性,修改Page_Load方法代码,如下:

 protected void Page_Load(object sender, EventArgs e){if (!this.IsPostBack){this.TextBox1.Text = "1";this.TextBox2.Text = "2";  }}

如此问题便解决了。

下面加深一步思考:在Textbox1和Textbox2两个文本框中分别赋值1和2后,单击求和按钮,讲表单中控件的值传送到服务器,Default.aspx.cs中的程序依次执行Page_Load方法和Button_Click方法,然后再一次生成HTML网页。当再一次生成HTML网页时,两个文本框应该会自动设置为初始值(即空值)状态,这就是Web的无状态性,即Web不能够保存上次程序完成时的那些变量值,但是事实上这是的TextBox1和TextBox2两个文本框中仍然显示着单击求和按钮之前的1和2,是什么将1和2自动填写在两个文本框中呢?好吧,是ASP.NET用另一种方法讲控件的值或状态持续地保存了下来,具体做法:

服务器执行Default.aspx.cs中所有的程序后,将当前控件的状态值记录到表单的一个隐藏区域(<input type="hidden">)中,在提交后,ASP.NET解析这个隐藏域的值,重新获取各控件的状态,这样就能够保持Web控件的状态不停地传递下来,这个过程有点像操作系统调用中断时,将当时各寄存器的状态都保存起来,中断结束后,再将寄存器的状态又恢复回来。大家可能注意到当提交操作时地址栏中会有一个常常的QueryString,其中有一个键值名为_VIEWSTATE,就是保存各个控件状态。在浏览器中查看网页源码能够找到如下代码:

综上,当我们需要赋初始值时,AutoEventWireup这个属性一定要注意,否则很容易犯错误。

个人理解,如有错误,敬请指正!

我看AutoEventWireup相关推荐

  1. 不用asp.net MVC,用WebForm照样可以实现MVC(请看最后一句话)

    在<避开WebForm天坑,拥抱ASP.Net MVC吧>这篇博客中我讲到了ASP.net WebForm由于一些先天的"诱导犯罪"的缺陷,现在用ASP.net MVC ...

  2. 看几道JQuery试题后总结(下篇)

    感谢圆友的提醒 昨天下午完成了9道试题中的前4道,之后好多园友存在些疑惑和建议,在这里我一并说一下吧.首先对于昨天第一题可能存在误导,在JQuery中并没有innerHTML这个属性,不过我们可以将J ...

  3. 从myspace数据库看分布式系统数据结构变迁

    从myspace数据库看分布式系统数据结构变迁 http://smb.pconline.com.cn/database/0808/1403100.html [08-29 14:33:40]出处:pco ...

  4. 使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed

    使用第三方SDK(如微信.qq.快看.头条等),调用接口405 Method Not Allowed 错误描述:postman请求正常,但客户端调用后接口没有反应,但返回了405错误. 解决方法:第三 ...

  5. 只要5分钟用数据可视化带你看遍11月份新闻热点事件

    2017年11月份已经离我们而去,在过去的11月份我们也许经历了双十一的剁手,也可能亲眼看见了别人剁手.11月份的北京大兴区发生了"11·18"重大火灾,国内多家幼儿园也多次上了头 ...

  6. redis 双写一致性 看一篇成高手系列1

    首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作. 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存.又或者 ...

  7. 揭富人与穷人21个不同思维 看富豪如何脱颖而出

    <富人是怎么想的>(How Rich People Think)的作者Steve Siebold曾在近30年里采访世界各地的富豪,看究竟是什么让富豪从普通人中站出来. 他发现这和金钱基本没 ...

  8. 对装饰器@wraps的解释(一看就懂)-- 并对装饰器详解

    1. 先看一段代码 def is_login(func):def foo(*args,**kwargs):return func(*args,**kwargs)return foodef test() ...

  9. Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法

    机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着丹药出炉了. 不过,当过厨子的都知道,同样的食材,同样的菜谱,但火候不一样了, ...

最新文章

  1. swoole php配置文件,easyswoole自义命令加载自定义配置文件
  2. 两个python文件怎么联系在一起_【新手求助】怎样把两个程序连接在一起?老师作业,谢谢啦...
  3. linux cgi命令,Linux之cgi实现系统主机监控
  4. 关于关闭SELinux的方法
  5. ncurses初始化函数:raw(),cbreak(),echo(),noecho(),keypad(),halfdelay()
  6. egg 编码规范_从 Egg.js 到 NestJS,爱码客后端选型之路
  7. 生成对抗网络的损失函数如何设计_如何检测极小人脸?试试超分辨率
  8. win7 OEM设置工具
  9. 热修复 阿里的AndFix
  10. 一个基于Tp3.2(thinkphp3.2)的工会管理系统
  11. 在线计算CAN波特率参数
  12. Vue.js:事件修饰符stop,once,prevent的使用
  13. 百宝云COM组件操作教程
  14. saltstack高效运维简介和部署,SaltStack 与 Ansible 如何选择?
  15. [实验吧刷题]密码学部分
  16. 快速余弦变换matlab,离散余弦变换 - MATLAB Simulink - MathWorks 中国
  17. 通用方法 关闭Outlook最小化非直接退出
  18. Direct3D中的绘制
  19. 如何用WxJump成功解决生成在微信可用的网址二维码的API接口
  20. UE4开发常见问题:导入插件、代码调试、格式异常

热门文章

  1. MySQL去重查询只保留一条最新的记录
  2. 全向轮三轮小车的搭建(二)
  3. 【5. MySQL 的执行原理】
  4. 利尔达展芯再度蝉联全球电子元器件分销商卓越表现奖
  5. 适合小学生的计算机教育,适合每个小学生家庭教育的十个方法
  6. 【安全与风险】安全研究的新课题
  7. ZZULIOJ 2698: 太阳轰炸
  8. android打开视频噔_Android中三种视频的播放
  9. html设置打开页面后自动关闭,Win7系统打开IE浏览器后页面自动关闭的四种解决方法...
  10. 11.22A 御坂美琴-优先队列模拟