ASP.NET 是一个开放框架,用于通过 HTML、CSS、JavaScript 以及来构建网页和网站。
ASP.NET 支持三种开放模式:
Web Pages、MVC (Model View Controller) 以及 Web Forms。
其中Web Pages是最简单的 ASP.NET 网页开发编程模型。它提供了一种简单的方法(Razor)将 HTML、CSS、JavaScript 以及服务器代码结合起来.Web Pages 通过可编程的 Web Helpers 进行扩展,包括数据库、视频、图像、社交网络等等。一般通过WebMatrix进行开发.
MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计:
虽然现在MVC使用很方便,但ASP.NET也有其自身的优点. 因此,摘抄一下相关的知识点,以备后续使用. 但对于摘抄的格式, 需要统筹规划一下,即相当于编写一部说明书一一样,分为几个大的部分,而每个部分又可以再次划分为几个小的部分. 总的来说,第一部分应该为ASPNET的简介类常识,第二部分为常用技巧,第三部分为一般操作流程,第四部分为常用操作函数,第五部分为常用操作相关知识点.第六部分为.........
1.ASP.NET 是.NET Framework的一部分,是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们。
asp.net网页在微软的官方名称中,称为 Web Form,除了是要和Windows Forms作分别以外,同时也明白的刻划出了它的主要功能:“让开发人员能够像开发 Windows Forms 一样的方法来发展 Web 网页”。因此asp.netPage 所要提供的功能就需要类似 Windows Forms 的窗体,每个 Web Form 都要有一个区块,所有的asp.net服务器控件都要放在这个区域中,这样才可以让 ViewState 等服务器控制能够顺畅的运作。
1.1asp.net的语法在很大程度上与 ASP 兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
1.2当创建asp.net应用程序时,开发人员可以使用 Web窗体或 XML Web services,或以他们认为合适的任何方式进行组合。
1.3 处理架构 asp.net运行的架构分为几个阶段:在 IIS 与 Web 服务器中的消息流动阶段。 在asp.net网页中的消息分派。 在asp.net网页中的消息处理。
1.4 事件模型 asp.net的事件模型是由以及数个 Hidden Field 组合而成,基于 HTTP 模型的限制,所有的网页程序在运行结果输出到用户端后,程序就会退出运行,为了维护在asp.net网页与控件的状态数据,因此在输出asp.net控件时,asp.net会将部份状态数据储存到网页的 Hidden Field 中,这类型的状态数据称为 ViewState(ID 为 __VIEWSTATE),在服务器端即会被解译出状态与事件数据。
1.5 来回模式 在asp.net运行的时候,经常会有网页的来回动作 (round-trip),在asp.net中称为 PostBack,在传统的 ASP 技术上,判断网页的来回是需要由开发人员自行撰写,到了asp.net时,开发人员可以用 Page.IsPostBack 机能来判断是否为第一次运行 (当asp.net发现 HTTP POST 要求的数据是空值时),它可以保证asp.net的控件事件只会运行一次,但是它有个缺点(基于 HTTP POST 本身的缺陷),就是若用户使用浏览器的刷新功能 (按 F5 或刷新的按钮) 刷新网页时,最后一次运行的事件会再被运行一次,若要避免这个状况,必须要强迫浏览器清空高速缓存才可以。
1.6 绘制技术 熟悉 ASP 技术的人都知道,代码都是混在 HTML 标签之间,以输出预期需要的 HTML 指令,这个技术在asp.net中,由各控件的绘制 (Render) 机制包装起来了,绘制机制装载了 HtmlTextWriter 对象,由它来产生 HTML 指令,它会输出至 HttpContext 的 Response 输出数据流中 (即 ASP 技术的 Response.Write())。
1.7 状态管理 在asp.net中,分为服务器端状态管理以及用户端状态管理,用户端状态管理为ViewState以及Cookies,服务端状态管理则是Session与Application对象。它们的差异点在于:ViewState 是加密的数据流,和 HTML 一起输出到用户端。 Cookies 是加密(也可不加密)的小型数据,和 HTML 不同,它可以高速缓存在用户端浏览器中。 Session 是服务器端的状态保存机制,每个用户端均有独立的空间(以浏览器运行个体来赋与唯一的SessionID值)。 Application 是服务器端的状态保存机制,但应用程序所有的用户端共用同一份状态数据。
1.8 层级对象 Application 对象会在应用程序的 Application_OnStart 事件中初始化,并使用名称来识别数据(它是一个 NameObjectCollectionBase 集合的实现品),它会储存在应用程序的范围内,所有的连接(用户)都可以使用,属于共用型的储存体,适合储存所有用户都可使用的数据,在多人使用的情况下,可以适当的使用 Lock/Unlock 的机制来确保应用程序状态的更新。Application.Lock();Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1;Application.UnLock();
1.9 控件 asp net的控件分为内置和外置两种。asp net的内置控件分为两种:HTML 控件 (HTML control)和用户控件 (User control)。外置控件,在使用前,需要将其添加到Visual Studio .NET环境中。然后就可以通过启动一个新项目来使用新的控件。
1.10 基本对象 以往在 ASP 中常被使用的五大基本对象,在asp.net中仍然持续被支持,但它们都换了一个身份来提供:
2.ASP.NET的常用技巧, 主要包括以下几种:
2.1 WebSite和WebApplication的区别
WebApplication每次修改以后点击【生成解决方案】也能立即看到修改效果,不需要重启浏览器。原理:生成以后才将变化的部分生成到dll,而WebSite则每次访问页面的时候会检查cs是否变了,变了则自动重新编译,所以每次修改以后立即有效果。
2.2 由于HTTP协议椒无状态的,只有设置了name的 input,textarea,select 的value属性值才会被提交给服务器.其它字段的值若需要传输,则需要通过隐藏字段进行.而提交一般只能由提交按钮执行. 而ASP.NET将所有隐藏内容统一放到了名字为_VIEWSTATE的隐藏字段中.
2.3Cookie是存在客户端,Session是存在服务器端,目的是一样的,保存和当前客户端相关的数据. 但Session机制并不是HTTP协议规定的,而是ASP.NET实现的. 且放的数据是OBJECT类型.
2.4网站开发基本原则: 客户端最小权限原则;浏览器是执行编译过的ASPX的,即服务器端与客户端执行的代码类型不同;能在客户端完成的事情(JS),不在服务器端完成(C#);客户端不可信.
2.5 127.0.0.1是回环地址(LoopBack),就是表示勇冠这回环地址访问本机.
2.6winform 与webform的区别就是前者是单机程序,无法进行B/S操作的, 例如在ASP.NET中调用WINFORM中的MessageBox.Show()语句,无法在客户端执行的.
2.7 客户端禁用JS可以简单地让客户检验失效. 故不能完全相信客户端检验.
2.8 aspx文件中 OnClientClick()是客户端的单击事件.
2.9 aspx文件中 @page 中 ValidateRequest 属性设置为false则可禁用网站请求中的验证功能.
2.10 由于get方式通过URL传送数据,URL的信息需要经过URL编码,故可以设置一定的软件,将通用信息编码成URL信息,从而可以通过GET方式发送.
2.11 路径标示符号,"/"表示网站根目录;"../"表示上一级目录;"./"当前目录;"~/"表示虚拟路径,即相对于目前应用的根目录, 是ASP.NET内部规定的符号,故只能在服务器中使用,
3.ASP.NET的一般操作流程如下:
4.ASP.NET的常用操作函数如下:
4.1 File.AppendAllText("c:/1.txt",TextBox1.Text),用于输出文本到相应的文件中.
4.2 File.ReadAllText("c:/1.txt")表示读取文本.
4.3 Response.Write(str)表示向页面写文本.
4.4 HttpUtility.HtmlEncode可以将字符串中的HTML标签解码成可以直接在页面上显示出来的内容.(literal控件的Mode属性更改为Encode可以实现相同的效果)
4.5 VirtualPathUtility.ToAbsolute("~/b/c.htm")表示将虚拟路径转化为全路径. string AppendTrailingSlash(strting virtualPath) 用于在~符号后加上/. Combine(string path1,
string path2)表示合并路径. string GetDirectory(string virtualPath)返回虚拟路径; string MakeRelative(string fromPath,string toPath)计算两个虚拟路径的相对路径.
4.6 DateTime.Now.ToString() 返回当前时间的字符串(包含时间点)
4.7 DateTime.Now.ToShortDateString()返回当前日期的字符串.
5.ASP.NET的常用相关知识点.
6.Request对象,Page类的一个属性. Request对象主要用于获取来自客户端的数据,如用户填入表单的数据、保存在客户端的Cookie等,本文将围绕Request对象,讲解其的主要作用:读取窗体变量、读取查询字符串变量、取得Web服务器端的系统信息。
6.1 Request.AppRelativeCurrentExecutionFilePath获取应用程序根的虚拟路径,并通过对应用程序根使用波形符 (~) 表示法(例如,以“~/page.aspx”的形式)使该路径成为相对路径。
6.2 PhysicalApplicationPath 获取当前正在执行的服务器应用程序的根目录的物理文件系统路径.
6.3 PhysicalPath 获取与请求的URL相对应的物理文件路径.
6.4 Request.RawUrl 不包含主机名及前面的内容。 Request.RawUrl 完整地体现地址栏的 QueryString,
6.5 Request.UrlReferrer可以获取客户端上次请求的url的有关信息,起到一些安全作用.
6.6 UserHostAddress 获取远程客户端的IP主机地址.
6.7 UserLanguages
6.8 Cookies 获取客户端发送的Cookie集合,该属性值为表示客户端的Cookie变量的 HttpCookieCollection对象
6.9 Request.MapPath(string) :是将string虚拟路径映射为物理路径(asp中Request无此方法)
Server.MapPath(string) :是将相对于当前调用文件的文件(或目录)映射为物理路径
7.Response 对象.Page类的一个属性.响应的缓冲输出:为了提高服务器的性能,asp.net向浏览器Write的时候默认并不会每Write一次都会立即输出到浏览器,而是会缓存数据,到合适的时机或者响应结束才会将缓冲区中的数据一起发送到浏览器。
7.1 Response.Buffer、Response.BufferOutput:两个的属性是一样的,Buffer内部就是调用BufferOutput。用来控制是否采用响应缓存,默认是true。
7.2 Response.Flush()将缓冲区中的数据发送给浏览器。这在需要将Write出来的内容立即输出到浏览器的场合非常适用。
7.3 Response.Clear()清空缓冲器中的数据,这样在缓存区中的没有发送到浏览器端的数据被清空,不会被发送到浏览器。
7.4 Response.ContentEncoding输出流的编码。
7.5 Response.ContentType输出流的内容类型,比如html(text/html) 、普通文本(text/pain)还是JPEG图片(image/JPEG)。
7.6 Response.Cookies返回给浏览器的Cookie的集合,可以通过它设置Cookie
7.7 Response.OutputStream输出流,在输出图片、Excel文件等非文本内容的时候使用它。(ashx中保存图片就用这个)
7.8 Response.End()终止响应,将之前缓存中的数据发给浏览器,End()之后的代码不会被继续执行。在终止一些非法请求的时候,可以用End()立即终止请求。(不往下执行了)
7.9 Response.Redirect(url)重定向浏览器到新的网址。即可以重定向到站外网址也可以重定向到站内网址。Redirect是向浏览器发回302重定向,是通知浏览器“请重新访问url这个网址”,这个过程经历了服务器知浏览器“请重新访问url这个网址”和浏览器接到命令访问新网址的过程。用Redirect因为是浏览器自己去访问新网址的,所以在地址栏中是可以看到网址的变化的。后面用这个来防止刷新时浏览器提示“重试”。
7.10 Response.SetCookie(HttpCookie cookie),向输出流中更新写到浏览器中的Cookie,如果Cookie存在就更新不存在就增加。是对Response.Cookies的简化调用。
7.11 Response.Write()向浏览器输出内容。
7.12Response.WriteFile(filename)向浏览器输出文件。
ClearError 清除前一个异常。
CreateObject 已重载。 创建 COM 对象的一个服务器实例。
CreateObjectFromClsid 创建 COM 对象的服务器实例,该对象由对象的类标识符 (CLSID) 标识。
Execute 已重载。 在当前请求的上下文中执行指定资源的处理程序,然后将执行返回给调用它的页。
GetLastError 返回前一个异常。
HtmlDecode 已重载。 对已被编码以消除无效 HTML 字符的字符串进行解码。
HtmlEncode 已重载。 对要在浏览器中显示的字符串进行编码。
MapPath 返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径。 该方法经常使用。将虚拟路径转换为服务器物理路径。
Transfer 已重载。 终止当前页的执行,并为当前请求开始执行新页(服务器内部操作,地址栏不变, 且显示访问请求一次,但不能访问ASHX页面)。
TransferRequest 已重载。 异步执行指定的 URL。
UrlDecode 已重载。 对字符串进行解码,该字符串针对 HTTP 传输进行了编码并在 URL 中发送到服务器。
UrlEncode 已重载。 编码字符串,以便通过 URL 从 Web 服务器到客户端进行可靠的 HTTP 传输。
UrlPathEncode 对 URL 字符串的路径部分进行 URL 编码并返回编码后的字符串。
UrlTokenDecode 将 URL 字符串标记解码为使用 64 进制数字的等效字节数组。
UrlTokenEncode 将一个字节数组编码为使用 Base 64 编码方案的等效字符串表示形式,Base 64 是一种适于通过 URL 传输数据的编码方案。
HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。
当一个HTTP请求经过HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。
定义一个实现了IHttpHandler的类,并且实现其ProcessRequest方法。在一个HttpHandler容器中如果需要访问Session,必须实现IRequiresSessionState接口,这只是一个标记接口,没有任何方法。
在web.config中注册这个类,并且指定Handler处理的请求类型把此节点插入system.web节点中
9.1HttpHandler可以直接输出html,jpeg,txt;
9.2实现文件下载时,如果需要输出对话框,则需要添加Header,即添加报文头.string encodeFileName=HttpUtility.UrlEncode("过滤词.txt"); Response.AddHeader("Content-Disposittion",string.Format("attachment;filename=\"{0}\"",encodeFileName)); 其中filename后为编码后的文件名.
9.3 excel的文件类型表示为 ContentType="application/x-excel", 或者"application/octer-stream".
9.4,生成EXCEL的代码表示:
string encodeFileName=HttpUtility.UrlEncode("动太数据.xls");
context.Response.AddHeader("Content-Disposittion","attachment;filename="+filename));
HSSFWorkbook workbook=new HSSFWorkbook();
HSSFSheet sheet=workbook.CreateSheet();
HSSFRow row=sheet.CreateRow(0);
HSSFCell cell=row.CreateCell(0,HSSFCell.CELL_TYPE_STRING);
cell.SetCellValue("hello");
row.CreateCell(1,HSSFCell.CELL_TYPE_NUMERIC).SetCellValue(3.14);
workbook.Write(context.Response.OutputStream);
9.5数据库的操作代码1:
SqlConnection conn=new SqlConnection(@"Data Source=\SQLEXPRESS; ....")//连接字符串.
conn.Open();
using(IDbCommand cmd=conn.CreateCommand())
{cmd.CommandText="select*from T_Users";
using(IDataReader reader=cmd.ExecuteReader())
{int rowname=0;
while (reader.Read())
{string username=reader.GetString(reader.GetOrdinal("UserName"));
HSSFRow row=sheet.CreateRow(rownum);
row.CreateCell(0,HSSFCell.CELL_TYPE_STRING).SetCellValue();
rownum++;
{cmd.CommandText=conn.CreateCommand())
9.6 XSD 文件, DataSet 是ADO.Net中相当重要的数据访问模型。有一个很大的优点是可以记录多个表之间的关系。有点类似与数据库的外键。这样一来,给我们数据查询带来很大方便。
9.7 ASP.NET的三层架构:表现层(UI)、 展示页面 引用BLL层 调用bll层; 业务逻辑层(BLL) 调用数据访问层的借口来获得数据 并返回给表现层; 数据访问层(DAL) 提供一些底层操作数据库的方法 并返回执行sql的数据 .
9.8 项目开发中,如果将@PAGE行中的codebehinde更改成codefile也可以避免更改ASPX时的重启问题,但只限于教学及测试使用.但如果是再次选择生成解决方案(不是重新生成,因为这样耗时太长),亦可达到重启的目的.
9.9数据库操作代码2:
int userId=(int)context.Session["UserId"]; //取得登录用户ID
T_UsersTableAdapter adapter=new T_UsersTableAdapter();//数据库选择工具
var data=adapter.GetDataById(userId);//SQL方法
var user=data.Single();
if(user.Level==0)//判断级别
{using(BitMap bitmap=new Bitmap(context.Sever.MapPath("images/"+filename)))//建立位图
using(Graphics g=Graphics.FromImage(bitmap))//建立图形对象
{g.DrawString("lower Level",new Font("宋体",20),Brushes.Red,0,0);//图形对象的绘画操作.
}
bitmap.Save(context.Response.OutputStream,ImageFormat.Jpeg)://输出图形
}
else
{ context.Response.WriteFile("images/"+filename);
}
9.10 double span=(DateTime.Now-user.LastErrorTime).TotalMinutes://计算两个时间点的时间间隔, 并转换成相应的计量单位.
9.11 SQL中的 ISNULL使用指定的替换值替换 NULL。
语法
ISNULL ( check_expression , replacement_value )
参数
check_expression 将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。
replacement_value 在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。
返回类型 返回与 check_expression 相同的类型。
注释 如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。
9.12 JS中的window.location.href="";表示转向另外一个页面.
9.13 DOM中的document.getElementById("leftDiv").innerText="XX" ; 表示将HTML中标签leftDiv的值设置为XX.
9.14 项目开发中调试时重启页的设置问题, 即为了避免重复设置,可以WEB中设置成当前页.
9.15 C#开发时若路径中含有#等符号,容易导致程序运行出错.
10.webform简介.
10.1 对于webform,由于集成了相关操作,故aspx文件相当于原来的 html模板,而aspx.cs则相当于一般处理程序 ashs. 即模板与后端代码的关系.
cs可以调用aspx中的控件,aspx也可以调用cs中的(public or protected /no private)属性或字段或函数, 也可以编写C#代码(需用<%%>标注).
10.2 <%=MyName%> 此表达式表示在当前位置输出表达式myName的值, 若无等号,则执行此表达式.
10.3 为了理解ASPX, CS的关系,在CS中的page-load方法中,进行以下输出.则可以看出CS是FORM类的子类.
Response.Write(this.GetType());//form1_aspx