列举ASP.NET页面之间传递值的几种方式

 更新时间£º2019年03月22日 08:19:28   作者£º熊金宇   我要评论

这篇文章主要介绍了列举ASP.NET 页面之间传递值的几种方式£¬小编觉得挺不错的£¬现在分享给大家£¬也给大家做个参考¡£一起跟随小编过来看看吧

1 .列举ASP.NET 页面之间传递值的几种方式¡£

1).使用QueryString, 如....?id=1; response. Redirect().... 
2).使用Session变量 
3).使用Server.Transfer

为了在页面之间传递变量内容£¬ASP.NET给了我们几个选择¡£一种选择是使用QueryString 属性

一£ºQueryString. 可以使用查询字符串请求网页¡£ASP.NET中的QueryString访问此信息¡£当你加载file.html£¿x = y时£¬它解析¡°x¡±和¡°y¡±¡£ 首先£¬我们看到一个.aspx Web窗体页面£¬在用户访问Default.aspx时执?#23567;?#36825;里的代码是代码隐藏部分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££

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");
  }
 }
}

测?#28304;?#30721;这个网址£º ?param=first&id=true

要进行测试£¬请在Internet浏览器£¨例如Internet Explorer或Firefox£©的URL末尾键入测试URL¡£该字符串指定¡°param¡±查询等于¡°first¡±¡£并且¡°id¡±参数等于¡°true¡±¡£

Quote£º可以使用键或索引访问的关联String键和String值的集合¡£

在QueryString上使用HasKeys的页面£ºC££

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]);
}

这种方法的缺点

  1. QueryString 有一个最大长度£¬如果你必须发送很多信息这种方法不起作用¡£
  2. QueryString 在您的浏览器的地址部?#31181;?#21487;见£¬因此您不应将其与敏感信息一起使用¡£
  3. QueryString 不能用于发送£¦和空格字符¡£

用£¥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)); 
}

二¡¢Session&Cookie

Session 使用简单£¬不仅能传递简单数据类型£¬还能传递对象¡£.数据量大小是不限制的¡£在Session变?#30475;?#20648;大量的数据会消耗较多的服务器资源¡£容易丢失¡£在源页面的代码中创建你需要传递的名称和值构造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类类似于键类型字符串和值类?#25237;?#35937;的?#20540;ä¡?#36825;允许存储任何类型的变量£¬并稍后通过名称引用它¡£

什?#35789;ÇCookies£¿

Cookie是在客户端的系统或客户端浏览器内存上创建的小文件£¨如果是临时的£©¡£我们可以在客户端系统中存储小块信息£¬并在需要时使用它¡£ 最有趣的是它与用户?#35813;?#22320;工作 ¡£它可以轻松地在Web应用程序的任何位置使用¡£ Cookies?#28304;?#25991;本格式存储信息 ¡£如果Web应用程序使用cookie£¬则服务器发送cookie£¬客户端浏览器将存储它¡£然后£¬浏览器在下次请求页面时将cookie返回给服务器¡£使用cookie的最常见示例是 存储用户信息£¬用户首选项£¬密码?#19988;?#36873;项 等.Cookies?#34892;?#22810;优点和缺点¡£

Cookies是如何开始的£¿

当客户端向服务器请求时£¬服务器将cookie发送到客户端¡£后续请求可以引用相同的cookie¡£例如£¬如果 codeproject.com 将会话ID存储为cookie£¬则当客户端第一次在服务器上命中时£¬服务器会生成会话ID并将其作为cookie发送到客户端

浏览器和Web服务器负责交换cookie信息¡£对于不同的站点£¬浏览器以不同的方式保留cookie 如果页面需要来自cookie的信息£¬?#22791;ÃURL被命中时£¬首先它在本地系统中搜索cookie信息£¬然后将其移动到具有该信息的服务器¡£

Cookies的优点

以下是在Web应用程序中使用cookie的主要优点£º

它的使用和实现非常简单¡£

浏览器负责发送数据¡£

对于包含cookie的多个站点£¬浏览器会自动排列它们¡£

Cookie的缺点

它以简单的文本格式存储数据£¬因此根本 不安全 ¡£

Cookie数据有一个大小限制£¨ 4096字节/ 4KB £©¡£

允许的最大cookie数量也是有限的¡£大多数浏览器将cookie的数量限制为20.如果新的cookie出现£¬旧的cookie将被丢弃¡£?#34892;?#27983;览器最多支持 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始终是一个好习惯£¬因为浏览器可能已禁用c​​ookie¡£

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¡£

三¡¢Application对象

Application对象的作用范围是整个全局£¬也就是说?#36816;?#26377;用户?#21152;行§¡?#23427;在整个应用程序生命周期中都是?#34892;?#30340;£¬类似于使用全局变量一样£¬所以可以在不同页面中?#36816;?#36827;行存取¡£它和Session变量的区别在于£¬前者是所有的用户共用的全局变量£¬后者是各个用户独有的全局变量¡£

举个例子£º网站访问数¡£多个请求访问时都可以?#36816;?#36827;行操作¡£

优点£º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();

四¡¢Server.Transfer

终止当前页面的执行并开始执行当前请求的新页面¡£

Server.Transfer("Logon.aspx", true);

以上就是本文的全部内容£¬希望对大家的学习有所帮助£¬也希望大家多多支持脚本之家¡£

相关文章

最新评论

ÁÉÄþ35Ñ¡7¿ª½±½á¹û