欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-24 10:26:52
1 .列举asp.net 页面之间传递值的几种方式。 1).使用querystring, 如....?id=1; response. redirect().....

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时执行。这里的代码是代码隐藏部分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");
  }
 }
}

测试代码这个网址: ?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 在您的浏览器的地址部分中可见,因此您不应将其与敏感信息一起使用。
  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变量存储大量的数据会消耗较多的服务器资源。容易丢失。在源页面的代码中创建你需要传递的名称和值构造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始终是一个好习惯,因为浏览器可能已禁用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对象的作用范围是整个全局,也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。它和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();

四、server.transfer

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

server.transfer("logon.aspx", true);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。