代码隐藏类cs与aspx的关系

1.前台aspx代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Csharp前台代码.aspx.cs" Inherits="WebApplication1.Default" %>

<!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">
    <div>
    <%Response.Write("Hello"); %>
    
        <%for (int i = 0; i < 5; i++)
          {%>
        你好   
        <%} %>
        
        <%=Name%>
        
        <%=SayHello("dzj") %>
        
        <%SayGoodBye(); %>
  
    </div>
    </form>
</body>
</html>

2.后台cs代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

/*
cs与aspx的关系:
 1.cs是父类,aspx是子类,前台(aspx)输出到客户端需要在cs动态编译创建的子类中(一般是以ASP.+aspx文件名形式)执行输出到客户端,可通过临时产生的dll反编译解释
 */

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        public string Name 
        {
            get{
                return "后台字段strName";
            }
        }

        protected void SayGoodBye()
        {
            Response.Write(" Byebye");
        }

        public string SayHello(string name)
        {
            return name+" say Hello<b>";
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            //注意此时this所引用的实际对象为aspx中的对象,而不是cs的Default对象(在后续查看dll可以看到)
            Response.Write(this.GetType()+"<br/>");
            Response.Write(this.GetType().Assembly.Location + "<br/>");   //获取aspx页生成的dll位置(在后续查看dll可以看到)
            Response.Write(this.GetType().BaseType+"<br/>");
            Response.Write(this.GetType().BaseType.Assembly.Location + "<br/>");//获取cs页生成的dll位置(在后续查看dll可以看到)
        }
    }
}

好了,现在编译运行一下,看到了如图


得到这两个dll的路径,通过使用Reflector工具加载这个两个dll文件得到如下图


之后展开查看


通过查看发现aspx页面动态生成了一个“csharp前台代码_aspx”的页面而且继承自Default类。好,接下来看一下Default类到底是谁。。点击Default跳转到如下图


现在可以知道,为什么在aspx页面中可以通过<%%>的形式调用cs中的代码了吧,其实就是aspx页面从cs页面中派生而来,子类调用父类的东西天经地义嘛。。。

其实还从其他方面可以发现


从aspx动态生成的对象可以看到,aspx执行输出也不过是调用基类(就是cs中Default对象的方法)然后类似Response.Write()的方式输出到页面而已


实质:PageHandlerFactory处理程序工厂使***.aspx在后台生成两个类:部分类*** 和 ***_aspx,其中后台cs代码文件中的部分类***将和PageHandlerFactory促使的部分类***合并生成为一个完整的***类定义,而 ***_aspx 则是从 MyPage 派生的一个页面类,用来创建实际的页面对象实例。引用例图:


可参考:《ASP.NET本质论》一书,非常不错

http://book.51cto.com/art/201102/245000.htm


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值