ASP.NET-WebForm动态网站开发技术(学习笔记)一
ASP.NET-WebForm动态网站开发技术
ASP开发概述
静态网页与服务器技术
静态网页
- 以.html或.htm结尾的网页
- 只能单纯的显示文本和图像
- 无法和用户交互,无法根据用户的请求显示不同的网页内容(也就是无法和后台数据库交互)
服务器端开发技术
- 不仅可以显示文本和图像
- 还可以根据用户请求,动态显示不同的网页内容(即,可以和后台数据库交互
B/S程序运行原理
![]() |
ASP.NET概述
常见的服务器端开发技术
- PHP、 ASP、 ASP.NET、 JSP等等
ASP.NET
- 基于.NET平台,可以使用C#和VB.NET开发后台应用程序
- ASP.NET主要用来开发Web应用程序
- ASP.NET程序运行在IIS中
了解IIS
- IIS(InternetInformation Services)是微软的Internet服务器
- IIS是 Windows servers 操作系统免费捆绑的组件
- IlS是web应用程序运行的服务器
前端和后台交互基本测试
回顾表单的应用
![]() |
![]() |
表单在提交时自动将数据封装在Request对象中,并传给一般处理程序
后台数据的获取
后台由一般处理程序(HttpHandler)读取前台网页提交的数据一般处理程序必须实现IHttpHandler接口
![]() |
一般处理程序应用
![]() |
![]() |
![]() |
结论:此种开发方式使得后台在绘制HTML页面时非常麻烦,对于复杂页面几乎无能为力
基于事件驱动开发
事件驱动开发简单应用
使用“控件+事件”方式实现计算器(和winform项目开发方式非常相似)
![]() |
事件驱动开发的本质
观察服务器返回到浏览器端的HTML代码
![]() |
内嵌代码
![]() |
ASP.NET开发总结
ASP.NET web应用程序与网站比较
相同点
- 1.两者可以开发web项目。
- 2.两者基于事件机制编写程序。
不同点
- 1.web应用程序在程序运行阶段不允许修改后台代码;网站在运行中可以随时修改后台代码,前台刷新即可。
- 2.web应用程序命名空间管理方便,而网站项目命名空间不好区分。
ASP.NET web应用程序与网站选择
- 一般场合:两种方式可以根据开发者喜好选择。
- 大型项目:一般都选择web应用程序,因为程序框架清晰。
Web服务器
内置的开发服务器 | IIS服务器 |
![]() |
![]() |
网站配置文件和网页生成过程
页面的Page指令
@Page指令定义了页面用于编译和解析的属性
![]() |
关于配置文件
回顾:Windows应用程序的配置文件App.config
![]() |
网站的配置文件
Web.config是网站的配置文件
![]() |
根目录下的Web.config文件是整个网站的配置和管理中心
网页生成过程分析
![]() |
网页生成过程总结
客户端点击提交按钮或者触发控件的事件
- →服务器端刷新整个页面
- →执行page_load事件
- →执行具体控件的事件并给页面控制赋值
- →重新生成新页面的HTML
- →使用response对象返回包含新数据的html页面
- 浏览器看到刷新后的页面
页面回发机制
页面内部数据传递
![]() |
ASP.NET服务控件中按钮默认都是submit类型,能够提交表单。
_VIETSTATE这个隐藏域就是用来将页面的控件状态保存起来,并且在服务器端和客户端“反复传递”
理解回发
理解网页的首次加载和回发加载的时机
![]() |
理解回发
- 产生的时机:当用户操作让表单产生submit时产生回发。
- 原理分析:当前网页被提交给服务处理,处理时服务器会对当前网页再次加载(重新绘制)。
- Load事件:不管是首次加载还是回发,网页都回激发一个Load事件。
回发引出的问题
在页面的Load事件中对网页内容初始化
![]() |
“回发”和“首次加载”
![]() |
Page对象
关于Page对象
- 每个.aspx文件对应一个Page对象
- .aspx页面与后台代码类(局部类)合并生成页面类
- Page对象是页面类的实例
- 所有的.aspx文件(Web窗体页)都继承自System.Web.UI.Page类
Page对象的属性和事件
![]() |
Request和Response对象的使用
请求与响应
Request与Response对象产生的时机
![]() |
Request与Response对象的本质
- Request对象其实是HttpRequest对象,在页面类中系统自动创建。
- Request对象封装了用户请求的信息(用户输入的信息或URL参数)。
- Response对象封装服务器的响应信息。
Request对象
Request对象如何获取传递过来的数据?
- QueryString属性(查询字符串):获取通过URL路径传来的数据
- Form属性(表单数据):获取通过表单提交传输的数据
- ServerVariables属性:获取Web服务器变量的集合
- Params属性:以上三种方式传输的内容都可以使用该属性获取
QueryString属性
使用QueryString属性获取URL参数
![]() |
Params属性
使用Params属性获取URL参数
![]() |
通过表单提交数据(和HttpHandler获取参数完全相同)
ServerVariables属性
获取Web服务器变量的集合
![]() |
Response对象
Response对象用于操作页面的输出流
Write方法:直接在页面上输出内容(在页面的最顶端输出)
Redirect方法:重定向到另一个页面(通过后台程序控制页面跳转)
![]() |
ViewState对象
由计数器引出的问题
实现一个按钮计数器,每次点击显示单击总次数
![]() |
分析结果
- 计数器变量值没有被保存,每次点击的时候都会被初始化为0。
- HTTP协议是“无状态”的,造成服务器无法记住特定用户的请求。
HTTP协议的无状态
理解无状态特性
- Web服务器不会保留每次浏览器所发HTTP请求的具体信息和当时的状态。
- 即使请求来自同一个浏览器,它也将其视为“陌生人”,绝不会“记得”浏览器在不久之前曾经“拜访”过自己
在ASP.NET后台中,不再有“成员变量”
![]() |
在ASP.NET后台中信息保存办法
- ASP.NET专门提供了在一个网页多次请求之间保存信息的对象:ViewState(视图状态)对象来模拟“成员变量”的角色。
使用ViewState实现页面信息的保存
![]() |
总结
ViewState中保存的数据全部被转换成object类型,取出时务必强制转换成特定类型。
ViewState只能在同一个页面的连续多次请求之间保存信息,页面跳转后信息就会丢失。
Session对象
不同页面之间信息共享
- ViewState对象无法实现不同页面数据交换
- 有时需要在一个页面操作的数据在另一个页面访问
- 典型应用:购物网站中用户选择不同商品后,在购物车页面中显示
- 在ASP.NET中不同页面之间共享信息的办法
- Session(会话)对象
- 和ViewState对象一样是“键--值”对存取数据
使用Session实现简单购物车
![]() |
Session原理分析
![]() |
问题:不同用户在选择商品时,Session如何区分不同用户的选择?
- Web服务器根据SessionlD来区分不用用户,它是一个很长的字符串。
- SessionlD在用户第一次访问时由Web服务器产生并由用户浏览器保存。
- 用户每次的操作,浏览器在向服务器请求时都会带着自己的SessionlD。
SessionlD的查看
![]() |
问题:Web服务器如何判断用户是第一次请求并为其生成SessionlD?
- 情况1:用户第一次打开浏览器并登录网页,浏览器中没有任何SessionlD。
- 情况2:用户把当前网站的网页全部关闭,再次登录网页,前面的SessionlD就会丢失。
- 情况3:用户使用不同浏览器登录网页,不同浏览器之间Session无法共享。
Session实现典型对象登录
Session应用和属性
典型应用
- 不用页面之间需要传递较为复杂的数据(如对象)
- 保存用户的登录信息,未登录者禁止访问相关页面。
属性和方法
![]() |
使用Session保存登录信息
Web程序中用户登录逻辑分析
![]() |
Cookie对象的使用
Cookie对象
Cookie对象的特点
- 存储少量不重要的数据
- 存储在客户端的文本文件中(必须设置有效期,否则不被存储)
- 安全性差
- 存储的数据类型—一字符串
- 浏览器窗口无关,但与访问的站点相关
- 具体特定的过期时间和日期
- 在客户端存储后,将随着浏览器对相关网站页面请求而一并发送到Web服务器
Cookie文件的位置
- Win7中:C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies
创建方法一:
- Response.Cookies[Cookie的名称].Value =变量值;
创建方法二:
- HttpCookie hcCookie=new HttpCookie(Cookie的名称,变量值);
- Response.Cookies.Add(hcCookie);
读取方法:
- string 变量名=Request.Cookies[Cookie的名称].Value;
注意:创建Cookie使用Response对象;读取使用Request对象
![]() |
Application对象
Application对象
如何统计一个站点被访问的次数?
- Application对象:应用程序级别的数据保存
Application特征:
- 位置:服务器内存,执行速度快。
- 使用范围:整个应用程序。
- 类型:任意类型。
- 生命周期:应用程序开始创建到销毁。
使用方法与Session一样采用“键--值”对方式
Global.asax文件
全局应用程序类:
- Global.asax处理应用程序级事件的可选文件。
- 必须放在在应用程序的根目录下。
![]() |
Application对象应用
实现用户访问量、在线人数的统计
![]() |
读取Application对象
![]() |
ASP.NET常用对象比较
![]() |
END
本文作者:云谷の风
本文链接:https://www.cnblogs.com/zeon/p/16617884.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异