WebForm 基础1

aspx文件:

aspx文件(新建项—>Web窗体)这个文件可以几乎写入任何的C#语句(就像当年的ASP),但是强烈不建议这么做。
这样的页面语法混杂,难以管理。

aspx中除了<%%>的内容和runat=server的内容,其他都是原样输出。

aspx中可以在<%%>中嵌入C#代码,如aspx.cs文件中的C#代码,都可以在<%%>中来写。但是不建议这么做。

在aspx中可以使用<%=表达式%>的方式在页面的当前位置输出表达式(表达式至少要用protected级别),
表达式可以是一个方法、属性、字段。不要忘了写=。


aspx目的像其他模板引擎一样,都是简化拼html字符串。

示例代码:

aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!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>
        <asp:CheckBox Text="显示问好" runat="server" Name="IsShow" ID="IsShow" AutoPostBack="True"
            OnCheckedChanged="Unnamed1_CheckedChanged" />
        <% 
            if (IsShowHelloWorld())
            {      // 这里就是C#代码,注释也是C#的注释语法
        %>
        <br />     <%--这里是html代码,注释是这种语法 --%>
        <br />
        <br />
        <span style='color: red'>
            <%=GetHelloWorld() %>
        </span>
        <% 
            }      // 这里又是C#代码,与上面的if语句形成一个完整的判断。
        %>
    </div>
    </form>
</body>
</html>

aspx.cs:

 public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected bool isShowHelloWorld;
        protected bool IsShowHelloWorld()
        {
            return isShowHelloWorld;
        }

        protected string GetHelloWorld()
        {
            return "您好";
        }

        protected void Unnamed1_CheckedChanged(object sender, EventArgs e)
        {
            if (IsShow.Checked)
            {
                isShowHelloWorld = true;
            }
            else
                isShowHelloWorld = false;
        }
    }

aspx和ashx关系
aspx就是一个特殊的ashx,aspx对应的类是Page,Page是实现了IHttpHandler接口,
所以可以说aspx是高级的HttpHandler,aspx中帮我们封装了很多操作,我们可以傻瓜化的进行开发。

ashx(HttpHandler),aspx(Page)


aspx、aspx.cs关系揭秘
在WebForm的页面中执行以下的代码:

protected void WriteType()
        {
            Response.Write(this.GetType() + "<br/>");
            Response.Write(this.GetType().Assembly.Location + "<br/>");
            Response.Write(this.GetType().BaseType + "<br/>");
            Response.Write(this.GetType().BaseType.Assembly.Location + "<br/>");
        }
输出:

ASP.webform1_aspx
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\d6e1812d\9a75c48f\App_Web_d3gkj0nc.dll
WebApplication1.WebForm1
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\d6e1812d\9a75c48f\assembly\dl3\3c414925\0ad1d900_4830cf01\WebApplication1.DLL


发现当前执行页面的类名是ASP.webform1_aspx这样的类名,

父类才是WebApplication6.WebForm1。

使用ILSpy或者Reflector等打开dll,反编译这两个类,发现
WebApplication6.WebForm1是在VS编译器中编写的aspx.cs类,

反编译的内容里没有任何前端页面上的html代码。

ASP.webform1_aspx则是一个继承自WebApplication6.WebForm1的子类,
ASP.webform1_aspx代码是根据aspx内容动态生成的构建网页内容的类。

重写父类的方法,

protected override void FrameworkInitialize()

在FrameworkInitialize()方法里调用

private void __BuildControlTree(webform1_aspx __ctrl)

构建控件树。

在aspx中所有用C#写的代码都是在  _Renderform1方法里渲染拼接成html代码。

private void __Renderform1(HtmlTextWriter __w, Control parameterContainer)


综上所述:
aspx最终也会生成一个类,
这个类是继承自aspx.cs中的类。
查看反编译以后的代码,可以看到就是编译生成了普通的.NET代码,
代码中在拼接html。因为aspx生成的代码是cs类的子类。

所以就明白了:

为什么“aspx中调用cs的成员级别必须是protected或者public,不能是private的。”
为什么“aspx中可以调用aspx.cs中的成员方法和属性了。”



摘自:传智播客 http://net.itcast.cn/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值