前言: 这篇博客简单的介绍了一下WebForm的概念以及Page类的成员信息等,所以这篇博客只是我们开始真正入门前的一些简单说明应用,下面的博客我们将开始说asp.net服务器控件。
- 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 MyName2 3 {4 5 get { return "我是韩迎龙啦"; }6 7 }8 9 <%=MyName %>
(4) 在当前位置输出表达式的值的时候使用<% =UserName %>,不要丢了等号”=”,相当于在当前位置调用Response.Write(UserName);
(5) 使用的函数,代码相当于在这个位置调用函数,执行代码,注意:aspx中调用cs成员级别必须是protected或者public,不能使private。
- aspx,cs,dll之间的关系
(1) 在webForm的页面中执行下面的代码:Page_Load{}
1 1) Response.Write(this.GetType() + ""); //this表示当前类的对象2 3 2) Response.Write(this.GetType().Assembly.Location + ""); //编辑完成后看到Assembly是在哪里4 5 3) Response.Write(this.GetType().BaseType + "");6 7 4) Response.Write(this.GetType().BaseType.Assembly.Location + "");
(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”。
- 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") %>2 3 <%=ResolveUrl("~/ashx/第10篇/Default.aspx")%>