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?
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。
三、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);