ASP.NET学习笔记(1)

1、ASP.Net简介

A、ASP.Net动态网页技术。在服务器端运行.Net代码,动态生成HTML。在浏览器可以使用JavaScript、Dom完成前台工作。如存储数据、访问数据库、业务逻辑运算等可以在服务器端完成。

B、服务端控件和HTML控件的关系:服务器控件并不是新的控件,在浏览器仍然转换成html标签。

2、ASP.Net服务端控件服务做了什么?

A、服务器端控件与普通的HTML控件的区别在于 runat="server",服务端控件会在编译后转换成标准的html标签。

B、<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<input name="TextBox1" type="text" id="TextBox1" />

3、WebSite和WebApplication的区别

A、WebSite和WebApplication程序修改.aspx文件时不需要重起即可看到效果。WebSite程序在修改.cs文件时~不需要重启浏览器即可看到效果。而WebApplication程序在修改.cs文件时~需要启动浏览器进行调试。

B、WebSite不需要创建命名空间,但不利于工程化开发,比如代码出错不容易发现,代码不分命名空间。

C、两种编程模型的互相转换:VS2005 SP1内置了转换程序,可以非常方便的从WebSite转换到WebApplication。

D、大网站比较适合用WebApplication项目,小网站比较适合用WebSite项目。

4、ASHX文件的用途

A、.ashx比.aspx的好处在与不用多一个html

B、*<input>标签中ID和name的作用和区别

ID CSS和JS中引用~name用于表单提交,只有加了name属性的标签元素才会提交到服务器。

5、ASP.Net的IsPostBack

A、<input type=”hidden” name=”ispostback” value=”true” />

B、IsPostBack属性在asp.net中指示当前的页面是不是第一次被加载,如果是第一次加载,那么IsPostBack的值就等于false,如果不是第一次加载,那么IsPostBack的值就是true。

6、Get和Post的区别

A、get是从服务器上获取数据,post是向服务器传送数据。

B、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

C、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

D、Request.Params是所有post和get传过来的值的集合,request.params其实是一个集合,它依次包括request.QueryString、request.Form、request.cookies和request.ServerVariable。

E、建议:在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式。

7、ViewState

A、ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。

B、使用ViewState的条件

窗体标记 <form runat=server>

Page 的 EnableViewState 属性值为 true。

控件的 EnableViewState 属性值为 true。

C、设置ViewState

ViewState可以在控件,页,程序,全局配置中设置。

在控件中:<asp:DataGrid EnableViewState="false"%>或DataGrid1.EnableViewState = false;

在页中:<%@ Page EnableViewState="false" %>或Page.EnableViewState = false;

在程序中:在web.config中加入 <pages enableViewState="false" />

在全局配置:在machine.config中修改 <pages enableViewState="false" />

D、EnableViewState优先级别:

全局配置 < 程序< 页 < 控件

注意:下列服务器控件不能禁止ViewState

Textbox、Checkbox、Checkbox List、RadioButtonList这些控件的状态通过IPostBackEventHandler 和 IPostBackDataHandler接口处理,而不是ViewState的机制,所以EnableViewState没有效果。

E、ViewState对象

在ViewState存放数据:ViewState[key] = value; 或 ViewState.Add(key, value);

取出数据:TempStr = ViewState[key];key不存在时返回空。

不能通过ViewState对象来访问控件的值。

F、提醒:

1.当存在页面回传时,不需要维持控件的值就要把 ViewState 禁止。

2.ViewState的索引是大小写敏感的。

3.ViewState不是跨页面的。

4.为了能包存在 ViewState 中,对象必须是可流化或者定义了 TypeConverter。

5.控件 TextBox 的 TextMode 属性设置为 Password时,它的状态将不会被保存在 ViewState 中。

6.在页面 没有回传或重定向或在回传中转到(transfer)其他页面 时不要使用 ViewState。

7.在动态建立控件时要小心它的 ViewState。

8.当禁止一个程序的 ViewState 时,这个程序的所有页面的 ViewState 也被禁止了。

9.只有当页面回传自身时 ViewState 才是持续的。

8、Cookie

A、Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法。

B、浏览器负责管理用户系统上的 Cookie。

C、如果没有设置 Cookie 的有效期,仍会创建 Cookie,但当用户关闭浏览器时,Cookie 便会被丢弃。即为非永久性Cookie。

D、将 Cookie 添加到 Cookies 集合中。

方法一:

Response.Cookies["userName"].Value = "patrick";

Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);

方法二:

HttpCookie aCookie = new HttpCookie("lastVisit");

aCookie.Value = DateTime.Now.ToString();

aCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(aCookie);

E、多值Cookie

方法一:

Response.Cookies["userInfo"]["userName"] = "patrick";

Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();

Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

方法二:

HttpCookie aCookie = new HttpCookie("userInfo");

aCookie.Values["userName"] = "patrick";

aCookie.Values["lastVisit"] = DateTime.Now.ToString();

aCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(aCookie);

F、限制Cookie范围

1、Cookie 限制到某个文件夹或应用程序

Response.Cookies["userInfo"]["userName"] = "patrick";

Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();

Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

Response.Cookies["userInfo"].Path = "/Application1";

2、限制 Cookie 的域范围

Response.Cookies["domain"].Value = DateTime.Now.ToString();

Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);

Response.Cookies["domain"].Domain = "support.contoso.com";

G、读取Cookie

1、取单

if(Request.Cookies["userName"] != null)

Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);

if(Request.Cookies["userInfo"] != null)

{

Label1.Text =

Server.HtmlEncode(Request.Cookies["userInfo"]["userName"]);

}

H、修改和删除Cookie

不能直接修改 Cookie。更改 Cookie 的过程涉及创建一个具有新值的新 Cookie,然后将其发送到浏览器来覆盖客户端上的旧版本 Cookie。

I、删除Cookie

删除Cookie是修改 Cookie 的一种形式。由于Cookie在用户的计算机中,因此无法将其直接移除。创建一个与要删除的Cookie同名的新Cookie,并将该Cookie的到期日期设置为早于当前日期的某个日期。当浏览器检查Cookie的到期日期时,浏览器便会丢弃这个现已过期的Cookie。

J、删除子键

Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();

Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

K、浏览器是否接受Cookie

确定Cookie 是否被接受的一种方法是尝试编写一个Cookie,然后再尝试读取该Cookie。如果无法读取您编写的Cookie,则可以假定浏览器不接受Cookie。

下面的代码示例演示如何测试浏览器是否接受 Cookie。此示例由两个页面组成。第一个页面写出 Cookie,然后将浏览器重定向到第二个页面。第二个页面尝试读取该 Cookie。然后再将浏览器重定向回第一个页面,并将带有测试结果的查询字符串变量添加到 URL。

第一个页面的代码如下所示:

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

if (Request.QueryString["AcceptsCookies"] == null)

{

Response.Cookies["TestCookie"].Value = "ok";

Response.Cookies["TestCookie"].Expires =

DateTime.Now.AddMinutes(1);

Response.Redirect("TestForCookies.aspx?redirect=" +

Server.UrlEncode(Request.Url.ToString()));

}

else

{

Label1.Text = "Accept cookies = " +

Server.UrlEncode(

Request.QueryString["AcceptsCookies"]);

}

}

}

第二个页面的代码如下所示:

protected void Page_Load(object sender, EventArgs e)

{

string redirect = Request.QueryString["redirect"];

string acceptsCookies;

if(Request.Cookies["TestCookie"] ==null)

acceptsCookies = "no";

else

{

acceptsCookies = "yes";

// Delete test cookie.

Response.Cookies["TestCookie"].Expires =

DateTime.Now.AddDays(-1);

}

Response.Redirect(redirect + "?AcceptsCookies=" + acceptsCookies,

true);

}

9、Session

A、Web.config文件中的Session配置信息

<sessionState mode="Off|InProc|StateServer|SQLServer"

cookieless="true|false"

timeout="number of minutes"

stateConnectionString="tcpip=server:port"

sqlConnectionString="sql connection string"

stateNetworkTimeout="number of seconds"/>

必须有的属性是:

sessionState mode:设置将Session信息存储到哪里;

Off 设置为不使用Session功能。

InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。

StateServer 设置为将Session存储在独立的状态服务中。

SQLServer 设置将Session存储在SQL Server中。

可选的属性是:

Cookieles:设置客户端的Session信息存储到哪里

ture使用Cookieless模式

false使用Cookie模式,这是默认值。

Timeout:设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟

stateConnectionString:设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。

sqlConnectionString:设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是SQLServer时,这个属性是必需的。

stateNetworkTimeout:设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。

10、HTTP协议

A、超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

B、HTTP协议分析工具:

DebugBar、HttpWatch、HttpAnalyzer

上一篇:ExcelPower_Helper插件功能简述与演示


下一篇:SQL语句性能测试