1 .列举ASP.NET 页面之间传递值的几种方式。html
1).使用QueryString, 如....?id=1; response. Redirect().... 2).使用Session变量 3).使用Server.Transfer
为了在页面之间传递变量内容,ASP.NET给了咱们几个选择。一种选择是使用QueryString 属性web
一:QueryString. 可使用查询字符串请求网页。ASP.NET中的QueryString访问此信息。当你加载file.html?x = y时,它解析“x”和“y”。首先,咱们看到一个.aspx Web窗体页面,在用户访问Default.aspx时执行。这里的代码是代码隐藏部分Default.aspx.cs。
尝试在URL
的末尾添加字符串“?param = dotnet
”。Response.Write将被触发。
基于: .NET QueryString示例:C#浏览器
using System; using System.Web.UI; public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { string v = Request.QueryString["param"]; if (v != null) { Response.Write("param is "); Response.Write(v); } } }
结果, Page打印param查询的值,该值是字符串值:param is dotnet
。安全
两个参数。要继续,咱们测试两个查询字符串URL参数。这是开发中至关广泛的要求。可能必须同时使用其中一个或两个。服务器
带有多个参数的QueryString示例:C#cookie
using System; using System.Web.UI; public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { string v = Request.QueryString["param"]; if (v != null) { Response.Write("param is "); Response.Write(v); } string x = Request.QueryString["id"]; if (x != null) { Response.Write(" id detected"); } } }
测试代码这个网址:session
?param=first&id=true
要进行测试,请在Internet浏览器(例如Internet Explorer或Firefox)的URL末尾键入测试URL。该字符串指定“param”查询等于“first”。而且“id”参数等于“true”。并发
Quote:可使用键或索引访问的关联String键和String值的集合。
在QueryString上使用HasKeys的页面:C#app
using System; using System.Web.UI; using System.Collections.Specialized; public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { // Get collection NameValueCollection n = Request.QueryString; // 查看是否存在任何查询字符串 if (n.HasKeys()) { // 获取第一个键和值 string k = n.GetKey(0); string v = n.Get(0); // 测试不一样的键 if (k == "param") { Response.Write("param is " + v); } if (k == "id") { Response.Write("id is " + v); } } } }
Request.QueryString还可使用它们在查询字符串中的位置来检索此值。测试
private void Page_Load(object sender, System.EventArgs e) { this.txtBox1.Text = Request.QueryString[0]; this.txtBox2.Text = Request.QueryString[1]; } foreach( string s in Request.QueryString) { Response.Write(Request.QueryString[s]); }
要么
for (int i =0;i < Request.QueryString.Count;i++) { Response.Write(Request.QueryString[i]); }
这种方法的缺点
用%20替换空格和用%26替换空格。
private void btnSubmit_Click(object sender, System.EventArgs e) { string p1 = this.txtName.Text.Replace("&","%26"); p1 = this.txtName.Text.Replace(" ","%20"); string p2 = this.txtLastName.Text.Replace("&","%26"); p2 = this.txtName.Text.Replace(" ","%20"); "WebForm2.aspx?" + "Name=" + p1 + "&LastName=" + p2; Response.Redirect(p2); }
也可使用Server.UrlEncode。Server.UrlEncode 方法更改查询字符串,以便它们不会产生问题。
private void btnSubmit_Click(object sender, System.EventArgs e) { Response.Redirect("WebForm2.Aspx?" + "Name=" + Server.UrlEncode(this.txtName.Text) + "&LastName=" + Server.UrlEncode(this.txtLastName.Text)); }
2、Session&Cookie
Session
使用简单,不只能传递简单数据类型,还能传递对象。.数据量大小是不限制的。在Session变量存储大量的数据会消耗较多的服务器资源。容易丢失。在源页面的代码中建立你须要传递的名称和值构造Session变量:Session["Name"]="Value(Or Object)
";在目的页面的代码使用Session变量取出传递的值。Result = Session["Nmae"]
注意:session不用时能够销毁它,销毁的方法是:清除一个:Session.Remove("session名")
;清除全部:Session.Clear();
string city = "Seattle"; // 保存到Web窗体页面类中的会话状态 Session["City"] = city; //从Web窗体页面类中的会话状态读取。 city = (string)(Session["City"]); //在Web窗体页面类以外,使用HttpContext.Current。 HttpContext context = HttpContext.Current; context.Session["FirstName"] = firstName; firstName = (string)(context.Session["FirstName"]);
Session类相似于键类型字符串和值类型对象的字典。这容许存储任何类型的变量,并稍后经过名称引用它。
什么是Cookies?
Cookie是在客户端的系统或客户端浏览器内存上建立的小文件(若是是临时的)。咱们能够在客户端系统中存储小块信息,并在须要时使用它。最有趣的是它与用户透明地工做
。它能够轻松地在Web应用程序的任何位置使用。Cookies以纯文本格式存储信息
。若是Web应用程序使用cookie,则服务器发送cookie,客户端浏览器将存储它。而后,浏览器在下次请求页面时将cookie返回给服务器。使用cookie的最多见示例是存储用户信息,用户首选项,密码记忆选项
等.Cookies有许多优势和缺点。
Cookies是如何开始的?
当客户端向服务器请求时,服务器将cookie发送到客户端。后续请求能够引用相同的cookie。例如,若是codeproject.com
将会话ID存储为cookie,则当客户端第一次在服务器上命中时,服务器会生成会话ID并将其做为cookie发送到客户端
浏览器和Web服务器负责交换cookie信息。对于不一样的站点,浏览器以不一样的方式保留cookie 若是页面须要来自cookie的信息,当该URL被命中时,首先它在本地系统中搜索cookie信息,而后将其移动到具备该信息的服务器。
Cookies的优势
如下是在Web应用程序中使用cookie的主要优势:
它的使用和实现很是简单。
浏览器负责发送数据。
对于包含cookie的多个站点,浏览器会自动排列它们。
Cookie的缺点
它以简单的文本格式存储数据,所以根本不安全
。
Cookie数据有一个大小限制(4096字节/ 4KB
)。
容许的最大cookie数量也是有限的。大多数浏览器将cookie的数量限制为20.若是新的cookie出现,旧的cookie将被丢弃。有些浏览器最多支持300
个。
如何建立Cookie
要使用cookie,咱们须要使用命名空间System.web。
方式1(使用HttpCookies类)
HttpCookie StudentCookies = new HttpCookie("StudentCookies"); StudentCookies.Value = TextBox1.Text; StudentCookies.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(StudentCookies);
方式2(直接使用Response)
Response.Cookies["StudentCookies"].Value = TextBox1.Text; Response.Cookies["StudentCookies"].Expires = DateTime.Now.AddDays(1);
方式3(同一个cookie中的多个值)
Response.Cookies["StudentCookies"]["RollNumber"] = TextBox1.Text; Response.Cookies["StudentCookies"]["FirstName"] = "Abhimanyu"; Response.Cookies["StudentCookies"]["MiddleName"] = "Kumar"; Response.Cookies["StudentCookies"]["LastName"] = "Vatsa"; Response.Cookies["StudentCookies"]["TotalMarks"] = "499"; Response.Cookies["StudentCookies"].Expires = DateTime.Now.AddDays(1);
查看代码,看看咱们如何建立cookie并使用Web响应添加它。
已建立的cookie将一直存在,直到浏览器关闭。咱们能够坚持使用cookie。
如何从Cookies中读取数据
如今是时候从cookie中检索数据了。在阅读cookie以前,首先咱们须要检查是否找到了cookie。在阅读cookie以前检查cookie始终是一个好习惯,由于浏览器可能已禁用cookie。
string roll = Request.Cookies["StudentCookies"].Value; //For First Way string roll = Request.Cookies["StudentCookies"].Value; //For Second Way string roll; roll = Request.Cookies["StudentCookies"]["RollNumber"]; roll = roll + " " + Request.Cookies["StudentCookies"]["FirstName"]; roll = roll + " " + Request.Cookies["StudentCookies"]["MiddleName"]; roll = roll + " " + Request.Cookies["StudentCookies"]["LastName"]; roll = roll + " " + Request.Cookies["StudentCookies"]["TotalMarks"]; Label1.Text = roll;
如何清除cookie信息?
咱们能够在cookie文件夹中清除客户端机器上的cookie信息
设置到cookie对象的到期时间
userInfo.Expires = DateTime.Now.AddHours(1);
它会在一小时内清除cookie。
3、Application对象
Application对象的做用范围是整个全局,也就是说对全部用户都有效。它在整个应用程序生命周期中都是有效的,相似于使用全局变量同样,因此能够在不一样页面中对它进行存取。它和Session变量的区别在于,前者是全部的用户共用的全局变量,后者是各个用户独有的全局变量。
举个例子:网站访问数。多个请求访问时均可以对它进行操做。
优势:1.使用简单,消耗较少的服务器资源。
2.不只能传递简单数据,还能传递对象。
3.数据量大小是不限制的。
缺点:1.做为全局变量容易被误操做。因此单个用户使用的变量通常不能用application。
使用方法:1.在源页面的代码中建立你须要传递的名称和值构造Application变量:Application["Nmae"]="Value(Or Object)";
2.在目的页面的代码使用Application变量取出传递的值。Result = Application["Nmae"]
注意:经常使用lock和unlock方法用来锁定和解锁,为了防止并发修改。
string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock();
4、Server.Transfer
终止当前页面的执行并开始执行当前请求的新页面。
Server.Transfer("Logon.aspx", true);