asp.net基础

时间:2020-12-24 09:28:50

这篇主要讲述以下基础知识:

  • Request对象
  • Response对象
  • Server对象
  • Cookie对象
  • Application对象
  • ViewState对象
  • <%%>与<%=%>表达式、数据绑定表达式<%#%>
  • 目录运算符

Request封装了客服端的请求信息,它是HttpRequest的一个实例。Response代表了服务器的响应对象,它是HttpResponse的一个实例。每次客户端发出一个请求时,服务器就会用一个响应对象来处理这个请求,处理完之后,服务器就会销毁这个响应对象,以便继续接收其他客户端请求。Server用于获取服务器的相关信息,它是HttpServerUtility的一个实例。通过以下代码介绍这3个对象的一些属性:

 <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <script runat="server">

 </script>

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<table border="1" width="600px" bordercolordark="#2B72A2" bordercolorlight="#993333">
<tr><td colspan="2" bgcolor="#80ffff">Request</td></tr>
<tr><td>ApplicationPath</td><td><%=Request.ApplicationPath %></td></tr>
<tr><td>ContentEncoding</td><td><%=Request.ContentEncoding %></td></tr>
<tr><td>Cookies Count</td><td><%=Request.Cookies.Count %></td></tr>
<tr><td>QueryString Count</td><td><%=Request.QueryString.Count %></td></tr>
<tr><td>UrlReferrer</td><td><%=Request.UrlReferrer %></td></tr>
<tr><td colspan="2" bgcolor="#80ffff">Response</td></tr>
<tr><td>Charset</td><td><%=Response.Charset %></td></tr>
<tr><td>ContentEncoding</td><td><%=Response.ContentEncoding %></td></tr>
<tr><td>Cookies Count</td><td><%=Response.Cookies.Count %></td></tr>
<tr><td>ContentType</td><td><%=Response.ContentType %></td></tr>
<tr><td colspan="2" bgcolor="#80ffff">Server</td></tr>
<tr><td>Server.MapPath(".")</td><td><%=Server.MapPath(".") %></td></tr>
<tr><td>对特殊字符进行编码Server.HtmlEncode</td><td><%=Server.HtmlEncode("<h1>哈哈哈哈哈哈哈</h1>")%></td></tr>
<tr><td>没有进行编码</td><td><h1>哈哈哈哈哈哈哈</h1></td></tr>
<tr><td>对url路径进行编码Server.UrlEncode</td><td><%=Server.UrlEncode("<a href=\"www.baidu.com\">百度以下</a>")%></td></tr>
<tr><td>没有进行编码</td><td><a href="http://www.baidu.com">百度以下</a></td></tr>
</table>
</body>
</html>

这里要注意一下,请求对象的字符编码是UTF-8,而响应对象的编码为gb2312,这样很可能会产生乱码问题。Response的ContentType指的是返回网页的内容类型(mime类型),如果ContentType是text/html,代表响应是以HTML数据形式传输的,如果是image/jpeg,代表响应的是一张图片,还有很多其他别的类型,http权威指南有比较详细的讲述。

Session用来保存与特定用户相关的信息,它是HttpSessionState的一个实例。Session保存在服务器端,超过Session的生命周期(默认20分钟)后,服务器会销毁Session,使它不再占用服务器内存,因为服务器并不管客服端是否存在,所以无法确定客户端什么时候不再使用Session,因而会通过生命周期销毁Session,确保内存充足。Session是通过SessionID来区分不同用户的,并且在一个有限时间窗口内来自统一浏览器的请求标识为一个会话,也就是它们的SessionID是相同的,如果客户端启用了Cookie,那么客户端与服务器之间通过Cookie来传递SessionID的值;如果客户端没有启用Cookie,则通过URL来传递SessionID的值。

Cookie对象也是用来保存与特定用户相关的数据,它是HttpCookie的一个实例,但和Session不同,Cookie是保存在客户端上的,每次客户端发出请求时都会把Cookie一起发送到服务器,服务器每次响应客户端请求时会重新把Cookie发送到客户端保存。需要注意,Cookie只能保存字符串类型的数据,而Session可以保存任意类型的数据。Cookie也有默认的生命周期,可以手动设置,最多可以为50年之后,不过使用的时候需要注意,有可能被用户禁用的。

Application是HttpApplicationState的一个实例,存储的数据类型和存储位置和Session一样,并且Application存放的数据没有时间限制,除非在代码中手动删除或者Web服务器重启,否则存放的数据都不会丢失 。与Session和Cookie不一样,Application不是针对特别用户的,它适合保存全局的数据信息,常用作记录网站的用户访问量。

可通过以下例子演示Application和Session的区别和用法:

 <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <script runat="server">

 </script>

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<%
int applicationCount = 1;
int sessionCount = 1;
if (Application["ApplicationCount"] == null)
{
Application["ApplicationCount"] = 1;
}
else
{
applicationCount = (int)Application["ApplicationCount"] + 1;
Application["ApplicationCount"] = applicationCount;
}
if (Session["SessionCount"] == null)
{
Session["SessionCount"] = 1;
}
else
{
sessionCount = (int)Session["SessionCount"] + 1;
Session["SessionCount"] = sessionCount;
}
Response.Write("当前页面由Application记录到的被访问了" + applicationCount + "次<br/>");
Response.Write("当前页面由Session记录到的被访问了" + sessionCount + "次<br/>");
%>
</body>
</html>

ps:要注意Application和Session都是存储在服务器的内存中,所以不要存储太多或太大的数据。

ViewState是System.Web.UI.StateBag的一个实例。在asp.net中HTML和Web服务器控件使用了ViewState对象作为其主存储机制,用ViewState对象来存储控件的基本状态信息,当然在开发过程中也可以使用ViewState来存储自定义的数据。ViewState提供一种在一个页面的多个请求之间保存状态数据的方法,在处理页面时,ViewState会被散列为一个或多个隐藏域(可以通过查看页面代码见到隐藏域)。

ViewState很多方法和属性与Session相似,但是ViewState中的数据是以隐藏域的形式保存的并且ViewState中的数据只能在同一个页面的不同请求之间传递,而不能从一个页面传递到另一个页面。

以下是ViewState的一个例子:

 <%@ Page Language="C#" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <script runat="server">
protected void btnSet_Click(object sender, EventArgs e)
{
ViewState["text"] = txtSource.Text;
}
protected void btnGet_Click(object sender, EventArgs e)
{
if (ViewState["text"] != null)
{
txtResult.Text = (string)ViewState["text"];
}
else
{
txtResult.Text = string.Empty;
}
}
</script> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table border="0">
<tr><td>要设置的值</td><td><asp:TextBox ID="txtSource" runat="server"></asp:TextBox></td></tr>
<tr><td>获取到的值</td><td><asp:TextBox ID="txtResult" runat="server"></asp:TextBox></td></tr>
<tr><td><asp:Button ID="btnSet" runat="server" OnClick="btnSet_Click" Text="设置" /></td>
<td><asp:Button ID="btnGet" runat="server" OnClick="btnGet_Click" Text="获取" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>

<%%>用来编写程序的代码部分,而<%=%>用来向输出流中输出变量的值,可通过之前的查看。<%#%>用于绑定数据,可配合Xpath或Eval函数进行绑定。

目录运算符,有以下4种路径表示的方式:

1、直接以绝对URL表示

例如:<img src="http://www.baidu.com/images/book.jpg" />,表示的是图片位于www.baidu.com这个网站根目录的images子目录下。这段代码可以放在任意位置,只要确保图片和网络状态正常。

2、以相对与当前网页的形式表示

例如:<img src="data:images/book.jpg" />,表示的是图片位于陷入这段代码的网页所在目录下的images子目录下,必须保证网页与图片的这种对应关系才能保证正常显示。

3、以相对于网站根路径的方式表示

例如:<img src="/images/book.jpg" />,表示的是图片位于网站根目录下的images文件夹下,用这种方法,网页与图片之间不必豹祠一定的相应关系

4、以当前页面路径对等的路径形式表示

例如:<img src="../images/book.jpg" />,表示的是图片位于当前页面所在目录的上级目录下的images子目录下。

也可以通过设置<base href="" />的方式表示基于基路径的表示形式。在asp.net当中,引入了一种只能用于服务器控件上或者服务器代码里的根目录运算符(~),它表示当前应用程序的根目录,例如:

<asp:Image ID="aa" runat="server" ImageUrl="~/images/book.jpg" />