aspnettips

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) 设计:

  • Model(模型)表示应用程序核心(比如数据库记录列表)
  • View(视图)对数据(数据库记录)进行显示
  • Controller(控制器)处理输入(写入数据库记录)


Web Forms 是传统的 ASP.NET 事件驱动开发模型。添加了服务器控件、服务器事件以及服务器代码的网页。



虽然现在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中仍然持续被支持,但它们都换了一个身份来提供:

Application:包装了 HttpApplication 对象,在程序中使用 Application 指令取得的对象,都是来自于 HttpContext.Current.Application 属性回传而得。
Request:包装了 HttpRequest 对象,在程序中使用 Request 指令取得的对象,都是来自于 HttpContext.Current.Request 属性回传而得。
Response:包装了 HttpResponse 对象,在程序中使用 Response 指令取得的对象,都是来自于 HttpContext.Current.Response 属性回传而得。
Session:包装了 HttpSessionState 对象,在程序中使用 Session 指令取得的对象,都是来自于 HttpContext.Current.Session 属性回传而得。
Server:包装了 HttpServerUtility 对象,在程序中使用 Server 指令取得的对象,都是来自于 HttpContext.Current.Server 属性回传而得。

1.11 与ASP的区别 目前很多人对ASP.NET和ASP概念混淆,其实两者是不同,ASP是解释性编程框架,而ASP.NET是编译性框架;ASP.NET无论是从执行效率和安全上都远远超过ASP;ASP文件的后缀是.asp而ASP.NET则是.aspx和.aspx.cs。ASP.NET实现了代码分离,让代码管理更加直观。

1.12 服务器端控件与HTML控件的关系: 服务器端控件会渲染到浏览器成HTML.



2.ASP.NET的常用技巧, 主要包括以下几种:

2.1 WebSite和WebApplication的区别

 WebApplication(Web应用程序)和WebSite(网站)的区别:WebSite是为了兼容从ASP转过来的开发人员的习惯而存在的,用起来简单,例如:不需要创建命名控件、C#代码修改以后不需要重启就能看到变化(无论是WebSite还是WebApplication,修改aspx都不需要重启),但不利于工程化开发,比如代码出错不容易发现,代码不分命名空间。开发技术上没有任何区别,只是开发、调试习惯不同而已。 讲简单基础知识时用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)向浏览器输出文件。



8.Sever 是Context的一个属性.Server对象提供对服务器上的方法和属性的访问以及进行HTML编码的功能,这些功能分别由Server对象相应的方法和属性完成。在Asp.net WebForm中,Server对象是HttpServerUtility类的实例,而在Asp.net MVC中,Server对象是HttpServerUtilityBase对象。

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 传输数据的编码方案。



9. HttpHandler是asp.net真正处理Http请求的地方。在这个 HttpHandler 容器中, ASP.NET Framework 才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在 HTTP 请求信息流中再次返回到 HttpModule 中。
IHttpHandler在MSDN中的定义:使用自定义的HTTP处理程序同步处理HTTP Web请求而实现的协定。(注意:这里写的很清楚,是同步HTTP请求。如果是异步的话就要使用IHttpAsyncHandler接口)。他包含一个属性IsReusable,用于获取当前IHttpHandler实例是否可用,一般设置为true。一个方法ProcessRequest(HttpContext context),进行实际的操作过程。

HttpHandlerHttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。

当一个HTTP请求经过HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandlerProcessRequest成员方法来对这个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


         Response.Write(this.GetType().Assembly.Location);
         Response.Write(this.GetType().BaseType);//form1
         Response.Write(this.GetType()().BaseType.Assembly.Location);

11. Page类.  Page类,完整写法是System.Web.UI.Page。Default.aspx.cs文件中定义了一个名为"_Default"的类,此类是从Page类继承的,可以将aspx页面也看成一个类,这个类是从"_Default"类继承的,因此aspx页面实际上是从Page类继承的。继承关系:Page类←_Default←Default.aspx。所以在_Defaul类中编写的程序就可以作用于Default.aspx页面。包含Request,Response,Sever属性.
11.1 AppRelativeVirtualPath属性,获得页面相对于应用根路径的路径.
11.2 FindControl 通过控件的ID在页面的命名容器中查找它。该搜索不会进入本身也为命名容器的子控件
11.3 IsPostBack用于指示当前被加载的页面是对客户端回发的响应,还是第一次加载
11.4 Session 返回HttpSessionState类的实例。它用于管理用户特有的数据。
11.5 ResolveUrl根据TemplateSourceDirectory属性值,将一相对URL解析为绝对URL
11.6 cs页面类继承自 System.Web.UI.Page类,一般和文件同名,如果遇见关键字的情况才会自动使类名前加个'_',例如:_Default。关于cs页面类我们经常使用,它事实上是一个部分类,除了在cs文件里有一部分以外,在designer.cs文件还有另一部分(声明控件)。我们来谈谈其派生类---aspx页面类(从<%@Page里的Inherits属性可以看出),虽然我们编程的时候主要是针对cs页面类,但事实上在页面运行时,比如说cs页面类有一个Button的单击事件,.NET是到aspx页面类里找的,但由于aspx页面类是继承了cs页面类,所以.NET在aspx页面类里也能找到该单击事件,其他成员也是一样的道理。所以你会发现自动生成的事件的访问级别都是protected。所以你在cs页面类里自定义的方法(当然还有字段,属性等其他成员变量),如果在apsx页面类要使用的话,你也要将该方法的访问级别设为public或protected。


12.ASP.NET控件的基本属性, 基本继承于Control或WebControl.
12.1 ClientID  客户端ID,不一定是服务器端ID.故前端代码编程时需要使用客户端ID.
12.2 Visible  控件是否可见, 即是否渲染到HTML中,与HTML中的隐藏等属性有本质不同, 但效果基本一样.
12.3 CssClass   控件的样式名, 等同于HTML中的class属性.
12.4 Attributes   控件的额外属性.
12.5 某些控件(TextBox)的autopostback属性可以设置页面提交的时间.
12.6 某些控件的onClick事件 与 onClientClick事件是不同的事件.
12.7 用户单击控件时,HyperLink控件立即转向目标,表单不需回发postback到服务器端,而 LinkButton需将表单发回给服务器,在服务器端处理页面跳转功能,将用户导航到目标URL。
       HyperLink只需设置NavigateUrl就可以实现页面跳转, LinkButton控件实现页面跳转是在Click事件中使用Response.Redirect等方法实现的。
用法上最大的區別是 LinkButton有Click事件﹐而HyperLink沒有。
       HyperLink可以在运行时使用代码改变其属性,但是其本身不会触发任何事件, 因此只能在其它事件中添加属性设置的代码。HyperLink可以显示图片,可以设置Target方式的属性,这些都是LinkButton不具备的。
12.8webshell就是以 asp、 php、jsp或者cgi等 网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与 网站服务器 WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者 php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
12.9 注意一些控件的属性AssociatedControlID可以决定程序焦点的位置.
12.10 直接在控件属性中嵌套输入ASP代码,即<%%>,不能通过编译. 需要在JS及C#中编码.,但如果在属性中直接输入是可以的, 即ID=<%"Username"%> 是可以的. 但ID=~/images/<%"Username%>是不行的.


13. HTML控件在ASP.NET中会被服务器直接渲染成字符串输出, 即服务器不做任何操作.
      而ASP.NET服务器控件会被服务器渲染成客户端的HTML控件, 为高度封装的控件,具有属性,方法等.
      添加了runat="sever""属性的HTML控件,可以在服务器端操作,并渲染到客户端,但包装性相对有限. 适用于没有封装的部分HTML控件的使用.

14.验证控件.
14.1 RequiredFieldValidator, 属性ControlToValidate设定要验证的控件, text设定错误信息.  InitialValue设定默认值, 但默认值仍不是填入值.
14.2 RangeValidator,             
14.3 CompareValidator,
14.4 RegularExpressionValidator
14.5 CustomValidator.
14.6 窗体的IsValid属性用于验证其上的所有验证是否通过.
14.7 属性Display的值Static时, 需要隐藏时可以设置Visiblity 属性为hidden, 但此时所占空间为空. 而Display属性值为Dynamic none 表示隐藏,且不再占据空间.,
14.8 ValidationGroup可以给控件分组,从而避免不同类别的验证相互影响.
14.9 ValidationSummary 汇总验证控件,即 汇总所有的错误消息.


15.数据绑定控件.
15.1 数据源控件:
15.2 数据绑定控件:
15.3 Repeater控件用来遍历数据库, <ItemTemplate>标签用来设置显示模板.<%#Eval("xx")%>用来输出ID为XX的内容.
         <AlternatingItemTemplate>设置隔行模板.<HeaderTemplate>头部显示内容, <FooterTemplate>尾部显示内容.<SeparatorTemplate>分隔显示内容.


16.ListView的操作技巧.
16.1 在相关的模板中,不能直接引用模板中的控件, 而是通过FindControl()函数来操作. 即在itemCreated事件中通过该函数引用.
16.2 ckeditor与 ckfinder 集成控件的使用.


17. ClientScript.RegisterStartupScript(GetType(),'alert',"alert('文件类型错误,只允许jpg,gif,png')",true); 这样可以在服务器端提供JS代.

18. 设置页面缓存代码: <%@ OutputCache Duration="15" VaryByParam="none">, VaryByParam也可以设置为"id;name",则表示根据ID或NAME的值设置不同的缓存.也可以用通配符* 来代表一切参数.


19.典型VS数据操作代码. (SqlDataAdapter是T-SQL中的一个类).
    ........
using(SqlConnection conn=new SqlConnection("Data Source=.; Initial Catalog=mydb; Integrated Security="True";User ID=sa; Password=123456"))
{
                     conn.Open();
                     using(SqlCommand cmd=conn.CreateCommand())
                     {
                              cmd.Commandtext="select * from T_Student where Age<@aaa";
                              cmd.Parameters.Add(new SqlParameter("@aaa",60));
                     
                              //SqlDataReader reader=cmd.Executereader(); //SqlDataReader适用于大型数据,即不离线存储数据,故速度较慢.
                             
                              //SqlDataAdapter是一个帮我们把SqlCommand查询结果填充到DataSet中的类.
                              SqlDataAdapter adapter=new SqlDataAdapter(cmd); 

                              //DataSet相当于本地的一个复杂集合(List<int>)
                              DataSet dataset=new DataSet();
 
                              //Fill()函数把SqlCommand查询结果填充到DataSet.
                              adapter.Fill(dataset);

                      }
  
}





你可能感兴趣的:(aspnettips)