我是一个菜鸟,我只是在努力,2021正视自己,面对2021!

ASP.NET 高级编程基础第十一篇—WebForm和Page类成员

前言: 这篇博客简单的介绍了一下WebForm的概念以及Page类的成员信息等,所以这篇博客只是我们开始真正入门前的一些简单说明应用,下面的博客我们将开始说asp.net服务器控件。

  1. WebForm

(1) 如果每次输出网页都直接用HttpHandler的话太痛苦了,所以一般生成HTML的时候都直接创建aspx(web窗体,WebForm)。

(2) WebForm分为两个文件aspx和aspx.cs,aspx是页面模版,是页面描述文件,就是HTML的内容,和aspx结合的更好,不用像一开始那样程序员自己去填充模版,控件都是定义在aspx中的,内联的JavaScript,css也是写在aspx中的,服务端的C#代码就是定义在aspx.cs中的,aspx控制页面长相,cs控制程序逻辑,这种”前aspx后cs”的方式被称为CodeBehind。aspx就是模版引擎,不需要再去寻找第三方的模版引擎。

(3) cs可以调用aspx中的控件,aspx中也可以访问cs中定义的字段,函数,还可以编写复杂的C#代码,for等所有C#代码等都可以写到aspx中。

1)直接在aspx页面中写C#代码

1  <%for(int i=0;i<10;i++){ %>
2 
3             你好吗??
4 
5       <% }%>

2) 在cs中定义属性:

1     public string MyName
2 
3     {
4 
5         get { return "我是韩迎龙啦"; }
6 
7     }
8 
9 <%=MyName %>

(4) 在当前位置输出表达式的值的时候使用<% =UserName %>,不要丢了等号”=”,相当于在当前位置调用Response.Write(UserName);

(5) 使用的函数,代码相当于在这个位置调用函数,执行代码,注意:aspx中调用cs成员级别必须是protected或者public,不能使private。

  1. aspx,cs,dll之间的关系

(1) 在webForm的页面中执行下面的代码:Page_Load{}

1  1) Response.Write(this.GetType() + "<br />"); //this表示当前类的对象
2 
3   2) Response.Write(this.GetType().Assembly.Location + "<br />"); //编辑完成后看到Assembly是在哪里
4 
5  3) Response.Write(this.GetType().BaseType + "<br />");
6 
7  4) Response.Write(this.GetType().BaseType.Assembly.Location + "<br />");

(2) 发现当前执行的页面的类名是ASP.Weborm_aspx这样的类名,父类才是ASP.Weborm

(3) 使用Reflector打开这个临时的dll,反编译这两个类,发现ASPNETTEST1.WebForm是在vs中编写aspx.cs类,而ASPNETTEST1_aspx则是一个继承自ASPNETTEST1.WebForm1的子类,ASP.WebForm_aspx代码是根据aspx内容动态生成的构建网页内容的类,综上所述:aspx最终也会生成一个类,这个类继承自aspx.cs中的类,查看反编译以后的代码,可以看到就是编译生成了普通的.NET代码,因为aspx生成的代码是cs的子类,所以就明白了为什么”aspx中调用成员级别必须是protected或者public,而不是private”。

  1. Page类成员

(1) Request,Response,Server属性,对context.Request,context.Response,context.Server的简化调用。

(2) AppRelativeVirtualPath属性,获得页面相对于应用根路径的路径,比如:~/Default.aspx。

(3) FindControl(strlID),根据控件的ID找到控件,一般情况下直接在代码中写控件ID利用控件就可以了,但是对于有些场合,使用Listview等控件的模版,编写自定义控件等则需要使用FindControl来引用控件,FindControl返回值是Control,一般需要显示转换为相应的控件。TextBox txtBox=(TextBox)FindControl(”TextBox1”);    txtBox.Text=”韩迎龙”;

注释:拖放一个TextBox,Button按钮,双击Button按钮写入如下代码:

1     protected void Button1_Click(object sender, EventArgs e)
2 
3     {
4 
5         TextBox txt = FindControl("TextBox1") as TextBox;
6 
7         txt.Text = "博客园-Kencery";
8 
9     }

(4) ResolveClientUrl(url)将虚拟路径转换为客户端访问的路径,比如:ResolveClientUrl(”~/a/b.aspx”)结果是a/b.aspx,这通常在ListView等控件的模版中输出HTML使用,基本就是对VirtualPathutility.ToAbsolute的简化调用,考虑当前页面的相对路径,生成的路径短,最常用。

(5) ResolveUrl(url)将虚拟路径转换为相对于网站根目录的路径,比如:ResolveUrl(”~/a/b.aspx”)的结果就是/WebSite/a/b.aspx。VirtualPathUtility.ToAbsolute直接转换为一个全路径。

注:在.aspx页面中写入如下代码,不考虑当前页面

1   <%=ResolveClientUrl("~/ashx/第10篇/Default.aspx") %><br />
2 
3    <%=ResolveUrl("~/ashx/第10篇/Default.aspx")%>


 

posted @ 2012-08-22 11:23  Kencery  阅读(1235)  评论(0编辑  收藏  举报
友情链接:初心商城