asp.net之一步一个脚印

  刚刚加入博客园这个大家庭,现在还未交到朋友.我是asp.net的初学者,刚好学了整整一个月,这次是对asp.net进行一次系统的学习和分析,有错误的地方还请大家帮忙更正,不甚感激!
  当我们新建一个站点的时候,如果使用默认模板的话,VS2008会自动产生一个Default.aspx窗体页.
  他的初始代码如下:
 
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_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>Untitled Page</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
    
    
</div>
    
</form>
</body>
</html>
  我们首先来看看@Page这个指令,发现他包含4个属性:
  language : 指定页中所有内联呈现,代码声明块或者代码隐藏文件使用的编程语言.
这里有必要说明下内联呈现,代码声明块和代码隐藏文件的区别.
1.代码呈现块语法如下:
 <% 内联代码 %>
 
<%= 内联表达式 %>
举个例子: 
  
   <% Response.Write("hello"); %>
   
<%= "hello" %>
上面的效果是一样的,因为内联表达式是调用Response.Write的快捷方式.

2.代码声明块
代码声明块必须定义在<script>标记中,并且必须使用runat="server"属性标记.
<script runat="server">
        
// 代码在此 o(∩_∩)o哈哈
</script>

3.代码隐藏文件
OK,也就是Default.aspx.cs

我们接着看后面的属性,先来熟悉下CodeFile和Inherits属性吧...
CodeFile指定页的代码隐藏文件
Inherits指定页继承的代码隐藏类,我们打开代码隐藏文件Default.aspx.cs,就会看到这个类了,该类从Page类派生
public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    {

    }
}

ok,继续... 我们重点讲讲AutoEventWireup属性.
该属性默认情况下为true,那么到底有什么用呢,别急,待我具体说来...
我们先打开Default.aspx.cs,写下如下代码:
public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(
"测试中,请勿打扰");
    }
}

右键点击Default.aspx,选择View in Browser
这时应该显示测试中,请勿打扰...
现在,我们把AutoEventWireup属性设置成false,右键点击Default.aspx,选择View in Browser,发现只是一个空白页.
由此,我们可以推出,该属性是将Page对象和他的事件处理程序关联起来,相当于:
Page.Load += new EventHandler(Page_Load);

OK,我们现在只是简单地了解了这几个属性,接下来我们进入详细的分析阶段,准备好了吗,嘿嘿,去泡杯水,开始啦
我们先在default.aspx页中加入如下代码:
<div>
        
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        
<asp:Label ID="Label1" runat="server" Text='<%# DateTime.Now %>'></asp:Label>
    
</div>
对了,别忘了把AutoEventWireup属性设回true哦@@
这里的<%# %>构造块是数据绑定表达式语法,将Text属性设置成DateTime.Now变量的值,然后在代码隐藏文件中进行绑定..
然后在代码隐藏文件中加入如下代码:
 protected void Page_Load(object sender, EventArgs e)
    {
        DataBind();
    }
    
protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(
"早上好!");
    }
当我们向服务器提交请求时,如果是第一次请求,则Page.IsPostBack=false,否则,说明是回发请求.当请求到达服务器时,asp.net首先确定是否要分析和编译该页面,然后再加载编译好的程序集.
让我们来看看怎么把default.aspx转换成一个类,然后再编译成一个程序集吧?
首先,在default.aspx窗体页的@Page指令中加入Debug="true"启用调试.
进入asp.net临时文件夹下,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\
进入你的解决方案目录,你会看到有两个文件夹:

确定哪个文件夹是我们想要的,我们要分析的那个文件夹下面有好多文件.
来到那个文件,你会看到有连续的三个类文件.
就像:
App_Web_XXXXXXX.0.cs
App_Web_XXXXXXX.1.cs
App_Web_XXXXXXX.2.cs
我们先打开App_Web_XXXXXXX.0.cs
这是我们的窗体页转换后的结果,其中包含了两个类:
public partial class _Default : System.Web.SessionState.IRequiresSessionState {


  public class default_aspx : global::_Default, System.Web.IHttpHandler {
先来看第一个类:
    
    
#line 12 "F:\WebSite8\Default.aspx"
    
protected global::System.Web.UI.WebControls.Button Button1;
    
    
#line default
    
#line hidden
    
    
    
#line 13 "F:\WebSite8\Default.aspx"
    
protected global::System.Web.UI.WebControls.Label Label1;
    
    
#line default
    
#line hidden
    
    
    
#line 10 "F:\WebSite8\Default.aspx"
    
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
    
    
#line default
    
#line hidden
    
    
protected System.Web.Profile.DefaultProfile Profile {
        
get {
            
return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
        }
    }
    
    
protected System.Web.HttpApplication ApplicationInstance {
        
get {
            
return ((System.Web.HttpApplication)(this.Context.ApplicationInstance));
        }
    }
}


#line 12,13,10 分别定义了Button变量Button1,Label变量Label1以及Form变量from1,回到我们的窗体页看看他们分别对应什么,对了,是控件id号.

再来看第二个类:机子比较卡,我分到下一篇文章中. http://www.cnblogs.com/honey/articles/1161203.html

 h

o
n
e
y
原文地址:https://www.cnblogs.com/honey/p/1161231.html