关闭

ASP.NET 网页的重定向和传值

发表于:2016-3-15 10:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:王志良    来源:51Testing软件测试网采编

  在开发 ASP.NET 网站时,您经常需要从一个网页重定向(导航)到另一个网页,同时希望能够将信息从源页传递到目标页。例如,如果您正在开发一个保险网站,用一个页面来收集基本信息(用户信息、保险产品信息等),用另一个页面用来完成支付过程,而支付页面又需要前一页面的部分信息,这时就需要进行页面重定向和传值。
  实现网页之间信息传递的方式有很多种,例如,在页面上添加<a>标签并设置其href属性、运用 windows.location 对象、在后台代码中实现等。这里主要介绍如何在后台代码中实现网页之间的重定向和传值。
  新建初始项目
  文件 -> 新建 Asp.Net Web 应用程序 -> Empty -> 取名为 PassValueDemo
  添加新建项 -> Web窗体 -> SourcePage.aspx(源页)-> 继续添加Web窗体 -> TargetPage.aspx(目标页)
  备注:示例在VS2013学习版中演示
  网页相互调用
  Response.Redirect 方法用于将客户端重定向到新的 URL。
  备注:URL 可以是绝对路径,如 http://www.baidu.com 也可以是相对路径,如 TargetPage.aspx ,但某些浏览器可能会拒绝相对路径
  //从 SourcePage.aspx 重定向到服务器上的另一个网页 TargetPage.aspx
  Response.Redirect("TargetPage.aspx");
  //从 SourcePage.aspx 重定向到任一URL地址
  Response.Redirect("http://www.baidu.com");
  Server.Transfer 方法用于终止当前页的执行,并使用指定的页 URL 路径来开始执行一个新页。
  备注:1. URL 中指定的页面必须在服务器端存在(不能是 http://www.baidu.com 等)
  2. ASP.NET 执行此方法时不会验证当前用户是否有访问 URL 的权限,若需验证用户权限,可以考虑用 Response.Redirect 或 WindowsPrincipal.IsInRole 方法
  3. 页面跳转后浏览器中的 URL 地址不变,还是显示原来的 URL
  //终止当前页 SourcePage.aspx ,执行服务器上的另一网页 TargetPage.aspx
  Server.Transfer("TargetPage.aspx");
  网页之间传递值
  1. 使用查询字符串
  HttpRequest.QueryString 属性(NameValueCollection 类型)
  示例:下面的代码示例演示两种方法可以获取名为"fullname"的查询字符串变量的值。
  在每个示例中,如果 URL 是 http://localhost:49495/Target.aspx?fullname=Fadi%20Fakhouri ,则返回的值为"Fadi Fakhouri",因为 %20 是 URL 解码为一个空格字符。如果该 URL 不具有 fullname 查询字符串 ID,则返回的值将为 null。
  第一行代码会查找键仅在查询字符串中的"fullname",第二行查找密钥"fullname"中的所有 HTTP 请求的集合。
  //从 QueryString 中获取指定的对象
  string fullname1 = Request.QueryString["fullname"];
  //从 QueryString、Form、Cookies 或 ServerVariables 集合获取指定的对象
  string fullname2 = Request["fullname"];
  2. 使用会话状态
  2.1 HttpCookie 类
  获取和设置各 Cookie 的属性。 HttpCookieCollection 类提供存储、检索和管理多个 Cookie 的方法。
  ASP.NET 包含两个内部 Cookie 集合。通过 HttpRequest 对象的 Cookies 集合访问的集合,包含以 Cookie 标头形式由客户端传输到服务器的 Cookie。通过 HttpResponse 对象的 Cookies 集合访问的集合包含一些新 Cookie,这些 Cookie 在服务器上创建并以 Set-Cookie HTTP 响应标头的形式传输到客户端。
  示例:下面的代码示例演示如何对 HttpRequest 对象中名为 DateCookieExample 的 Cookie 进行检查。
  如果找不到该 Cookie,则将创建它并将其添加到 HttpResponse 对象。Cookie 设置为 10 分钟后过期。
<%@ Page Language="C#" %>
<!DOCTYPE html>
<body>
<form id="form1" runat="server">
<asp:Label ID="labCookie" runat="server"></asp:Label>
</form>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
// 从当前请求 HttpRequest 中获取 Cookie
HttpCookie cookie = Request.Cookies.Get("DateCookieExample");
// 检查当前请求中是否存在 Cookie
if (cookie == null)
{
sb.Append("未从客户端获取到 Cookie ");
sb.Append("正在创建 Cookie 并添加到服务器的 http 响应对象中<br/>");
// 创建 Cookie
cookie = new HttpCookie("DateCookieExample");
// 把 Cookie 的值设置为当前时间
cookie.Value = DateTime.Now.ToString();
// 设置 Cookie 的过期时间为10分钟
cookie.Expires = DateTime.Now.AddMinutes(10d);
// 把 Cookie 添加到当前的http响应 HttpResponse 中
Response.Cookies.Add(cookie);
}
else
{
sb.Append("从客户端获取到的 Cookie <br/>");
sb.Append("Cookie 名称: " + cookie.Name + "<br/>");
sb.Append("Cookie 值: " + cookie.Value + "<br/>");
sb.Append("Cookie 过期时间: " + cookie.Expires.ToString() + "<br/>");
}
labCookie.Text = sb.ToString();
}
</script>
</body>
  2.2 Page.Session 属性(HttpSessionState 类型)
  该属性提供有关当前请求的会话的信息。为从 ASP.NET 应用程序请求页或文档的每个用户维护一个 Session 对象。当用户在应用程序中从一页移动到另一页时,存储在 Session 对象中的变量不会被放弃;相反,只要用户在应用程序中访问页,这些变量就将保持。
  有关会话状态的更多信息,请参见 ASP.NET Session State Overview。
  Session["Name"] = tbName.Text;
  Session["Email"] = tbEmail.Text;
  2.3 Page.Application 属性(HttpApplicationState 类型)
  ASP.NET 应用程序是单个 Web 服务器上的某个虚拟目录及其子目录范围内的所有文件、页、处理程序、模块和代码的总和。
  HttpApplicationState 类的单个实例在客户端第一次从某个特定的 ASP.NET 应用程序虚拟目录中请求任何 URL 资源时创建。对于 Web 服务器上的每个 ASP.NET 应用程序都要创建一个单独的实例。然后通过内部 Application 对象公开对每个实例的引用。
  应用程序状态不在网络场(应用程序被多台服务器承载)或网络园(应用程序被同一台计算机上的多个进程承载)中共享。
  Application.Lock();
  tbName.Text = Application["Name"];
  Application.UnLock();
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号