问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ASP.NET页面之间的传递值有哪些方式?

发布网友 发布时间:2022-04-27 08:11

我来回答

2个回答

懂视网 时间:2022-04-27 12:32

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

热心网友 时间:2022-04-27 09:40

总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer。

QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。

使用方法:1.在源页面的代码中用需要传递的名称和值构造URL地址。

2.在源页面的代码用Response.Redirect(URL);重定向到上面的URL地址中。

3.在目的页面的代码使用Request.QueryString["name"];取出URL地址中传递的值。

Session想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。

使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Session变 量。

2.在目的页面的代码使用Session变量取出传递的值。Result = Session["Nmae"]

Cookie这个也是大家常使用的方法,Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。所以Cookie也可以在页面间传递值。Cookie通过HTTP头在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。

使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Cookie对象:HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");Response.Cookies.Add(cookie); 

2.在目的页面的代码使用Cookie对象取出传递的值:Result = Request.Cookies[ "myCookie" ].Value;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
你喜欢外柔内刚的女孩还是外刚内柔的女孩? 男人喜欢外柔内刚还是外刚内柔型的女生 ...怎样涂好颜色啊,用彩笔还是彩铅啊...谢谢啦 ...也转动了,但是里面却没有动静,也没有风不过半分钟就关了,不是... 空调开机没反应,用遥控器点开关没反应,确定不是遥控器问题,空调重新插... 请问一下 上海电信的融合宽带一个月多少钱? 本人男 脸太圆想要瘦脸 不用药 女生初涉期货行业从事什么岗位比较好 为什么较少女生选择做期货交易 我现在就读大学,现在学校里新建一个期货专业,我在考虑转专业_百度知 ... 请问高达到底有多少集啊? 汪姓男孩取名 济南冬天哪好玩? 济南冬天去哪个景点好 济南冬天适合去哪个景点好玩 大庄家期货软件吸筹是什么? ASP.NET页面间传递有哪几种方式? 小米手机出现android是什么意思?vivo手机不开机,充电显示android 网贷邮政寄来法院传票 网贷逾期发信息说让我注意接收发院传票和诉状副本是真的吗? 小额贷款重庆法院传票真假 网贷借款一千逾期一年了,发来了法院传票,我想问问这个传票是真的吗 欠网贷钱没有还然后当地派出所给我打电话让我去拿法院传票是真的吗? 网贷没还收到了法院传票是真的吗 网贷之后短信收到法院传票是真的吗 网贷法院传票真的假的 英雄联盟 瑞文 光速qa键盘 ,按键怎么设置 lol锐雯怎么改建实现光速qa 猪肝和香蕉、栗子相克吗? 和猪肝相克的食物有哪些? 丝网花 芭比娃娃怎么做啊 谁能告诉我吗 而且有视频吗 我怎么搜不到 谁能帮帮我?谢谢了 芭比娃娃的房子怎样制作 怎样给芭比娃娃做一个化妆台用视频教 怎样自己制作芭比娃娃的房子 我把cad里面的用户自定义里面的键盘快粘贴捷键给删除了,怎么恢复啊 湘源 快捷命令删了 怎么恢复(连CAD的基本命令都没了) 如何恢复桌面上的cad2008的快捷方式命令 2009CAD的命令行删除了怎么复原 求北海自驾到重庆路线 自驾从北海至重庆的路上哪里方便转车去上海 北海回重庆多少公里 从北海回重庆长寿请给规划一下路线怎么走好? 从重庆自驾游到北海 全程大概多少公里? 油费以及过路费大概需要多少?全程路线怎么走? 然后北海到桂林的 重庆自驾桂林北海路线及景点不走回头路 列举ASP.NET 页面之间传递值的几种方式 中国文化的文房四宝是指什么?每宝是怎样分类呢? 写信到监狱,要到哪里买邮票? 邮寄信件到外地需贴本地邮票还是外地邮票 我要邮寄大量的信件,请问哪儿可以买到便宜的邮票? 汽车应该贴膜吗?贴膜到底好不好?