原文地址:http://www.cnblogs.com/xuyubing/archive/2013/10/01/3348344.html

  • 前言

  很久很久以前,还是我在学校的时候,我就看了传智里面视频,学习了一下Asp.net页面生命周期,当时看的时候,因为内功不够深厚,看起来很吃力,现在回头温习了一下,还是有点收获的,于是想用博客记录一下,以备自己复习。

  • 演示代码

  先新建了一个空的WebApplication1的工程,然后在里面新建了一个WebForm1的页面,代码页面编码如下

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title>
</head>
<body><form id="form1" runat="server">  <%for (int i = 0; i < 5; i++){Response.Write(i+Hello()+"</br>");}%><input type="text" id="txtName" runat="server" /><input type="text" id="txtPwd" /><%=strHello%><% Response.Write(strHello); %></form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.UI.HtmlControls;namespace WebApplication1
{public partial class WebForm1 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){txtName.Value = "我是通过后台代码修改了名称";Hello();Response.Write("<br/>"+GetType().Assembly.Location+"</br>");}protected string strHello = "哈哈哈哈。。。我是后台文件类里面的变量";protected string Hello(){return "我是Hello方法。。。";}}
}

编写上面的代码,是为了后面的演示,演示以上的代码是如何生成HTML页面代码,并输出到浏览器上的。
Response.Write("<br/>"+GetType().Assembly.Location+"</br>");这行代码是输出此页面编译后生成的临时的程序集,也就是一个临时的页面dll文件。以上代码运行结果如下:

由此我们得到一个输出路径,C:\Users\xuyubing\AppData\Local\Temp\Temporary ASP.NET
Files\root\c250054c\3abf1fff\App_Web_ijt4szh5.dll   这个路径就是此程序集生成的临时页面dll文件。

接下来我们用反编译工具来看看这个dll里面有什么东西

由此我们可以看出webform1继承了WebForm1类,那么这个WebForm1是哪里来的呢,我们再把此工程下面的bin目录下面的WebApplicatioin1.dll程序集也用工具看一下里面有什么东西

由上图我们可以得出的结论是WebForm1类就是WebApplicatioin.WebForm1.aspx.cs类,那么webform1_aspx类又是什么呢,它是继承WebForm1类的,我们再来看WebForm1.aspx页面的@page指令

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

Inherits="WebApplication1.WebForm1"表示的是继承WebApplication1.WebForm1类的,再由GetType().Assembly.Location输出本程序集。 得知App_Web_ijt4szh5.dll 这个临时的dll文件其实就是WebForm1.aspx页面,我们都知道.net dll文件里面装的都是类(由类组成),推出WebForm1.aspx页面其实就是一个类,我们在后面都将XXX.aspx页面统称为页面类,它继承了它的后台代码文件WebForm1.aspx.cs类。

  • 总结

  xxx.aspx页面其实也是一个类,它继承了它的后台代码文件xxx.aspx.cs类。

  • 解决的疑问  

  1.我们可以在.aspx页面中编写C#代码的根本原因是它本来就是一个类,它可以调用后台非私有的变量与方法,因为继承关系。

  2.页面分离问题。相信大家有时候可以看到,只有.aspx页面,找不到.aspx.cs文件,那是因为他们把后台文件类给分离封装了。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

只要指定CodeBehind 属性和Inheits属性就可以实现页面分离效果了,百度一下,你就知道。

  3.后台文件类可以调用页面类的控件,如txtName.Value = "我是通过后台代码修改了名称";那是因为凡是声明为runat="server"的控件都在后台页面类中声明了变量,下图可以看到txtName文本框被声明在后台了,页面类可以访问txtName是因为继承关系。而txtPwd文本框没有被标记为runat="server",于是没有在后台声明。

 那页面类是如何生成html页面代码的呢?下一篇,我们通过源码演示生成过程,WebForm页面生命周期控件树的生成和作用。

转载于:https://www.cnblogs.com/fcsh820/p/3349215.html

(转)Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码相关推荐

  1. 微信小程序页面生命周期详解

    页面生命周期函数 onLoad--监听页面加载 onReady--监听页面初次渲染完成 onShow--监听页面显示 onHide--监听页面隐藏 onUnload--监听页面卸载 Page({/** ...

  2. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  3. Fragment的懒加载与生命周期详解

    提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...

  4. vue 声明周期函数_Vue 生命周期详解

    Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...

  5. taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...

  6. flutter 生命周期详解

    flutter 生命周期详解 简介 一.widget 生命周期 二.APP 生命周期 总结 简介 众所周知,程序是有生命周期的,那么flutter 的生命周期是什么呢? flutter 的生命周期大体 ...

  7. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  8. 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记

    01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...

  9. Eclipse中Maven常用命令以及Maven生命周期详解

    Eclipse中maven常用的命令 在某一个maven项目右键快捷方式,然后点击Run As就可以发现几个Maven的命令: Maven Build: 这个命令用于编译Maven工程,执行命令后会在 ...

  10. Spring 生命周期详解

    Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...

最新文章

  1. mysql 亿级表count_码云社 | 砺锋科技-MySQL的count(*)的优化,获取千万级数据表的总行数 - 用代码改变世界...
  2. 升级人脸识别,小鱼易连要打通企业与个人微信,重塑视频会议3.0!
  3. Java洛谷P5461 赦免战俘讲解
  4. C/C++编译预处理指令
  5. android点击事件的优先级,Android事件体系全面总结+实践分析,系列篇
  6. js中数组的操作方法
  7. python成绩转换_Python格式化输出%与format能不能互相转换?
  8. 使用Anaconda3安装tensorflow,opencv,使其可以在spyder中运行
  9. 使用WMS海外仓储系统可以改变仓储管理的哪些方面?
  10. 【第7篇】Python爬虫实战-收集gitee中的issue问题
  11. java8 comparator接口_Java8 Comparator 排序方法
  12. 一次防火墙无法重启的排查过程和总结
  13. 无线传输wireless
  14. 调戏微软文言文AI翻译:“永不舍汝”、“其母之”是什么鬼???
  15. IT史上十大最尴尬瞬间 盖茨遭遇Win98死机居首
  16. Python 与量化分析
  17. Win 10 无法锁屏,快捷键win+L失效
  18. PV,UV,VV,IP
  19. ADAMoracle预言机将数据传至链上实现区块链落地应用
  20. 大数据技术之Hadoop(入门)概述、运行环境搭建、运行模式

热门文章

  1. 【Tableau Server 企业日常问题 21】Tableau Mobile 安卓apk 下载 (可以手机预览)
  2. Tableau Online免费注册试用
  3. 三菱 MX COMPONENT下载及安装测试
  4. [PMP]专题资源管理错题
  5. MySQL导入sql文件的三种方法
  6. UNIX环境高级编程
  7. Matlab-基于模型不确定补偿的RBF网络机器人自适应控制仿真
  8. 超好玩的vbs代码 (恶作剧代码)
  9. 让你不差钱的9款开源网管工具
  10. 实现有管理功能的ASP留言板