ASP.NET WEBFORM

Aspx

aspx文件(新建项→Web窗体) 。在aspx中可以使用<%=表达式%>的方式在页面的当前位置输出表达式(表达式至少要用protected级别,后面会讲为什么,如果自动提示出不来,则重新生成项目)或者局部变量,表达式也可以是一个方法、属性、字段。不要忘了写=。
这个文件可以几乎写入任何的C#语句(就像当年的ASP)。

aspx和ashx关系

aspx和ashx关系:aspx就是一个特殊的IHttpHandler ,aspx对应的类是Page,它是实现了IHttpHandler接口,所以可以说aspx是高级的HttpHandler, aspx中帮我们封装了很多操作,我们可以傻瓜化的进行开发。
反编译看:其实=就是相当于Response.Write(),直接写Response.Write()也可以。
ashx(handler),aspx(page)

aspx

Web窗体设计页面。Web窗体页由两部分组成:视觉元素(html、服务器控件和静态文本)和该页的编程逻辑(VS中的设计视图和代码视图可分别看到它们对应得文件)。VS将这两个组成部分分别存储在一个单独的文件中。视觉元素在.aspx 文件中创建。

ashx

ashx文件是主要用来写web handler的。使用.ashx 可以让你专注于编程而不用管相关的web技术。我们熟知的.aspx是要做html控件树解析的,.aspx包含的所有html实际上是一个类,所有的html都是类里面的成员,这个过程在.ashx是不需要的。ashx必须包含IsReusable属性(这个属性代表是否可复用,通常为true),而如果要在ashx文件用使用Session必须实现IRequiresSessionState接口。

aspx、aspx.cs关系

部分类

使用ILSpy或者Reflector等打开dll,反编译这两个类,发现ASPNETTest1.WebForm1是在VS中编写的aspx.cs类,而ASP.webform1_aspx则是一个继承自ASPNETTest1.WebForm1的子类,ASP.webform1_aspx代码是根据aspx内容动态生成的构建网页内容的类。综上,aspx最终也会生成一个类,这个类是继承自aspx.cs中的类。查看反编译以后的代码,可以看到就是编译生成了普通的.Net 代码,代码中在拼接html。因为aspx生成的代码是cs类的子类,所以就明白了为什么“aspx中调用cs的成员级别必须是protected或者public,不能是private的。

轻量级控件

asp.net webform:Button、TextBox、CheckBox、RadioButton、FileUpload、DropDownList、ListBox、Repeater。

Button控件

OnClientClick属性,当用户点击按钮的时候在浏览器端执行的代码,注意OnClientClick是字符串属性,写的代码是JavaScript代码,渲染成onlick,运行在浏览器端。<asp:Button ID="btnDel" runat="server" onclientclick="return confirm('真的要删除吗?')" Text="删除" /> 服务器端的OnClick。

LinkButton

用法和Button差不多,区别就是Button控件渲染为按钮,而LinkButton渲染为超链接。不要用LinkButton来实现普通的超链接:OnClick→Redirect,作死的节奏。 LinkButton真没啥用,除了长得像Button一样。不利于SEO;而且效率低。

FileUpload

WebForm会很“操心”的在form中自动帮我们加上enctype="multipart/form-data"

Repeater

Repeater相当于一个高级的foreach,每一项的显示用ItemTemplate格式去显示。

  <asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr><td><%#Eval("Name")%></td><td><%#Eval("Age")%></td></tr>
</ItemTemplate>
</asp:Repeater>
<%=test()%>:当前位置打印出来
<%test()%>:调用test方法
<%#Eval("Id")%>:数据绑定

ViewState

asp.net4.5之后ViewState做了加密处理,无法用ViewState查看器查看了,首先在Web.config的system.web节点下增加<machineKey compatibilityMode="Framework20SP1" />(开发不要这样干,只是为了研究),然后使用ViewStateDecoder2.0查看。
之前讲过HttpHandler是无状态的,aspx是高级的HttpHandler所以同样是无状态的,在aspx.cs中一般也不要用类字段。那么如果确实需要存储一些页面相关的变量怎么办呢?比如点击按钮“点击次数”加一。
什么原理?查看页面的__VIEWSTATE,它是一个隐藏的input。每次页面渲染生成html的时候,asp.net把ViewState中的值进行编码处理序列化为__VIEWSTATE这样一个隐藏字段放到html中,下次再次提交的时候把__VIEWSTATE提交,服务器把__VIEWSTATE反序列化填充到ViewState属性中。其实就是把浏览器端当成“数据暂存”场所。反编译看看Label的Text实现。
除了ViewState属性,还有哪些数据会放到__VIEWSTATE中?所有在cs代码中修改的值,比如给DataSource赋值的,比如Label的Text是没有放到__VIEWSTATE的,但是代码中给Text属性赋值就会被放到__VIEWSTATE中了。所以__VIEWSTATE是用来盛放“本次修改的内容”供“下次请求”还原现场使用,把Http模拟成了有状态。
Repeater的这一堆ViewState,坏处是什么?ViewState是可以被禁用的(页面EnableViewState="false";单控件禁用、单页面禁用、整站禁用),客户端只会保留基本的__VIEWSTATE。
什么时候可以禁用ViewState:当数据不需要“下次”使用的时候(不是只有设置,而是有读取控件的值的时候),就可以禁用
 数据出错则把Label设置为红色,需要启用ViewState吗?
 数据出错则把Label设置为红色,否则设置为绿色;点击BtnClear,如果Label为红色,则把Label设置为黑色,需要启用ViewState吗?
 把数据显示到Repeater中,需要启用ViewState吗?
全站禁用ViewState:system.web下<pages enableViewState="false"/>
先禁用,实在不行再启用。没有非要ViewState才能干成的事
(*)要想完全禁用ViewState要去掉form的runat=server,大部分服务器控件就都用不了了。MVC模式+Repeater。

ASP.NET WebForm的更多相关文章

  1. ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

    开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...

  2. 一、ASP.NET MVC 路由(一)--- ASP.NET WebForm路由模拟

    ASP.NET WebForm 应用,用户请求的是物理文件,其中包括静态页面和动态页面,在Url中的显示都是服务器中一个物理文件的相对路径.但是ASP.NET MVC就不同了,用户请求的是Contro ...

  3. (转)教你记住ASP.NET WebForm页面的生命周期

    对于ASP.NET Webform的开发者,理解ASP.NET Webform的页面生命周期是非常重要的.主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性.但是记忆和理解页面生命周期里提供 ...

  4. 【深入ASP.NET原理系列】--Asp.Net Mvc和Asp.Net WebForm共用一套ASP.NET请求管道

    .NET FrameWork4在系统全局配置文件(如在如下目录中C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config) 中添加了一个名字叫Url ...

  5. 性能工具MiniProfiler在Asp.Net WebForm跟踪EntityFramework

    http://www.xuebuyuan.com/356638.html 选择MiniProfiler.EF 默认会把MiniProfiler安装上,笔者程序是Asp.Net WebForm 不需要安 ...

  6. 解析ASP.NET WebForm和Mvc开发的区别

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  7. 【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net

    Ext.NET是基于跨浏览器的ExtJS库和.NET Framework的一套支持ASP.NET AJAX的开源Web控件,包含有丰富的Ajax运用,其前身是Coolite. 下载地址:http:// ...

  8. ASP.NET WebForm与ASP.NET MVC的不同点

    ASP.NET WebForm ASP.NET MVC ASP.NET Web Form 遵循传统的事件驱动开发模型 ASP.NET MVC是轻量级的遵循MVC模式的请求处理响应的基本开发模型 ASP ...

  9. ASP.NET Webform和ASP.NET MVC的区别

    ASP.NET WebForm ASP.NET Webform提供了一个类似于winform的事件响应GUI模型(event-driven GUI),隐藏了HTTP.HTML.JavaScript等细 ...

  10. ASP.Net WebForm学习笔记:一、aspx与服务器控件探秘

    作者:周旭龙 出处:http://edisonchou.cnblogs.com 开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便 ...

随机推荐

  1. 原生ajax详解

    Ajxa局部刷新用于提高用户体验.Ajax技术的核心是XMLHttpRequest对象(简称XHR) XMLHttpRequest对象 XMLHttpRequest对象在ie7及更高版本可以这样申明. ...

  2. 【转】Django HTTP请求的处理流程

    Django 和其他 Web 框架的 HTTP 处理的流程大致相同,Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行的.我们可以在 Middlewar ...

  3. 开源免费的.NET图像即时处理的组件ImageProcessor

    承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择,社区对于第三方插件的介绍还是比较少的,很多博文的内容主要还是介绍一些简单的操作(很多人都说博客园现在是“ ...

  4. Onsen UI 前端框架(二)

    上一章介绍了OnsenUI一些入门的知识以及它和AngularJS配合的初始化方法.这一章,咱们继续对这块内容进行介绍,对OnsenUI提供的组件进行更进一步的学习. 咱们从手机应用布局的最上面开始. ...

  5. Docker(开课吧笔记)

    1.Docker基本概念 Docker运行在Linux,需要git技能 docker官网解析   来源于容器又不仅仅是容器,第一个版本基于LXC,远远超过容器概念   交付时拿到的是镜像,直接run运 ...

  6. windows系统下安装composer

    使用安装程序安装 这是将 Composer 安装在你机器上的最简单的方法. 下载并且运行 Composer-Setup.exe,它将安装最新版本的 Composer 安装完成后,将composer的b ...

  7. 读书笔记 effective c++ Item 38 通过组合(composition)为 “has-a”或者“is-implemented-in-terms-of”建模

    1. 什么是组合(composition)? 组合(composition)是一种类型之间的关系,这种关系当一种类型的对象包含另外一种类型的对象时就会产生.举个例子: class Address { ...

  8. ES6常用语法整合

    ES6也出来有一会时间了,他新增的语法糖也的确大大提高了开发者的效率,今天就总结一些自己用到最多的. 说到ES6肯定是先介绍Babel了,据阮一峰老师介绍到,Babel是一个广泛使用的转码器,可以将E ...

  9. MongoDB基础教程系列--第一篇 进入MongoDB世界

    1.什么是MongoDB MongoDB是跨平台的.一个基于分布式文件存储的数据库.由C++语言编写.用它创建的数据库具备性能高.可用性强.易于扩展等特点.MongoDB将数据存储为一个文档,数据结构 ...

  10. 自动化监控利器-Zabbix深入配置和使用

    1.  配置流程 Zabbix完整的监控配置流程可以简单描述为: Host groups(主机组)→Hosts(主机)→Applications(监控项组)→Items(监控项)→Triggers(触 ...