我看AutoEventWireup

我看AutoEventWireup这句代码是自动生成的,在代码的第一句,那么你理解这个意思吗?   下面,着重说一下AutoEventWireup。大家可能不太注意这个,系统自动生成的一般我们情况下不用考虑,下面我们通过一个例子看一下这到底是什么?   如下是一个简单的计算机例子,三个Textbox控件,两个Label,一个Button组成。在这里我们的AutoEventWireup的值为True。

大家好,又见面了,我是你们的朋友全栈君。

我看AutoEventWireup

 

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

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

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

我看AutoEventWireup

我们看一下代码:

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事件中给Textbox1Textbox2都赋值了,下面我们运行一下:

我看AutoEventWireup

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

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

我看AutoEventWireup

思考1,为什么Textbox1Textbox2没有被赋值?

    

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

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

我看AutoEventWireup

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

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

    

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

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

2.AutoEventWireupTrue的情况下,不论输入任何数运行结果总是1+2=3,因为AutoEventWireupTrue时每次提交页面都会先执行行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";              }                               }

      
如此问题便解决了。

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

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

我看AutoEventWireup

 

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140215.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos安装git命令_linuxjdk安装

    centos安装git命令_linuxjdk安装一、查看是否安装过git,git–version若出现以上版本号,则代表已经安装了git,不需要再次安装了,否则就安装其实安装的话,分为用yum安装和下载git源码编译安装。但是cetos5以及以下版本中的yum都没有git,无法使用yum安装,而cetos6可以使用yum安装git,但是安装的git是1.7.1版本的,而github需要的git版本最低都不能低于1.7.2。所以如…

    2022年4月20日
    63
  • 如何得到给定序列的互补序列以及反向互补序列

    如何得到给定序列的互补序列以及反向互补序列用 python 实现如下 1 usr bin python2 Complementin dna ACTGATCGATTA 5 由于 python 区分大小写 所以先替换成小写可以有效避免后面重复替换的问题 6compleme

    2025年10月21日
    4
  • 字符串转整型c#_java字符串数组转字符串

    字符串转整型c#_java字符串数组转字符串在C++11中增加了string的字符串以及整数之间的转换函数标准增加了全局函数。std::to_stringstd::stoistd::stolstd::stoll用来将整型转换为字符串for(size_ti=0;i<14;i++){ stringfileName=”chID”+std::to_string(i)+”.hex”;}…

    2022年10月19日
    3
  • 打电话省钱的方法_打什么电话最消耗话费

    打电话省钱的方法_打什么电话最消耗话费作者:Saver原载:Saver省钱妙招版权所有,转载时必须以链接形式注明作者和原始出处及本声明。随着运营商们接二连三地推出一系列的优惠服务和套餐业务,不论是聊天、短信、上网、长途,还是在特定时段拨打电话,都有了让您能“占便宜”的打法。可是面对这么多的业务、这么多的特惠时段、特惠号码、套餐、特殊业务,谁能搞清楚哪个是最适合自己、最省钱的打法呢?让我们来帮您拨拨小算盘。下面的12个方案,看有没有…

    2022年10月7日
    2
  • 纠结应该先学Python还是Java?看完就有数了

    纠结应该先学Python还是Java?看完就有数了准备学习编程前,你一定会打开电脑搜索一下“先学Python还是先学Java?”扑面而来的是海量回答。如果你问一名Java程序员,肯定会建议你先学Java,因为他们认为Python像个乳臭未干的黄毛小子。但如果你问Python程序员,可能会得到一个完全相反的答案,他们认为Java是刻板啰嗦的老大爷,而人生苦短,我用Python。但别担心,今天我们将会从语言特色学习曲线职业方向市场需求…

    2022年7月8日
    20
  • 开源网管软件_网关开发

    开源网管软件_网关开发让你不差钱的9款开源网管工具(组图)http://network.51cto.com/art/200906/129490.htm 转载于:https://blog.51cto.com/zgxworks/167764

    2022年9月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号