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

这种方法的缺点

QueryString 有一个最大长度,如果你必须发送很多信息这种方法不起作用。

QueryString 在您的浏览器的地址部分中可见,因此您不应将其与敏感信息一起使用。

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?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdsgxp.html