• 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")%>


     

  • 相关阅读:
    【历史时刻】从学生到社会独立人——硕士毕业
    Linux 常用命令
    LInux系统下搭建redis集群
    docker 下创建自定义网络,并在运行容器时绑定网络和ip
    docker下安装mysql镜像
    windows下将consul注册为系统服务
    Sql批量替换字段字符,Sql批量替换多字段字符,Sql替换字符
    gerrit安装配置
    Linux安装jdk8及环境变量配置
    iTerm2配置优化
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/2650488.html
Copyright © 2020-2023  润新知