C#页面之间跳转功能的小结

引言   ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递值,同样的事情,在使用事件驱动编程模型的ASP.NET就不是那么容易了,当然了,我们仍然有一些方法可以实现同样的功能。本文将试着使用不同的可能的方法来解决这个问题,但可以预见是,本文将包含使用querystring,session变量以及server.Transfer方法来实现页面间的值传递。

使用QueryString 使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:

1,使用控件创建web表单(form)

2,创建可以返回表单的按钮和链接按钮

3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量

4,在保存的URL里添加QueryString参数

5,使用Response.Redirect重定向到上面保存的URL

下面

代码如下:

<STRONG>private void Button1_Click (object sender, System.EventArgs e) 

          string url; 
          url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;          
          Response.Redirect(url); 
 } 
</STRONG>

目标页面代码:

代码如下:

<STRONG>private void Page_Load (object sender, System.EventArgs e)
 {
               Label1.Text=Request.QueryString["name"]; 
               Label2.Text=Request.QueryString["email"];
 }
</STRONG>

的代码片断演示了如何实现这个方法:   源页面代码:

使用Session变量   使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:

1,在页面里添加必要的控件

2,创建可以返回表单的按钮和链接按钮

3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里

4,使用Response.Redirect方法重定向到另一个页面

5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它 下面的代码片断演示了如何实现这个方法:

源页面代码:

代码如下:

<STRONG>private void Button1_Click (object sender, System.EventArgs e)
 { 
          //textbox1 and textbox2 are webform 
          //controls
           Session["name"]=TextBox1.Text;  
           Session["email"]=TextBox2.Text; 
           Server.Transfer("anotherwebform.aspx"); 
}  
</STRONG>

目标页面代码:

代码如下:

<STRONG>private void Page_Load (object sender, System.EventArgs e)
 {
             Label1.Text=Session["name"].ToString(); 
             Label2.Text=Session["email"].ToString(); 
             Session.Remove("name"); 
             Session.Remove("email"); 
}
</STRONG>

Server.Transfer   这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:

1,在页面里添加必要的控件

2,创建返回值的Get属性过程

3,创建可以返回表单的按钮和链接按钮

4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面

5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了 以下代码综合实现上述步骤过程的代码:

源页面代码:     把以下的代码添加到页面中

代码如下:

<STRONG>public string Name { get { return TextBox1.Text; } }

public string EMail { get { return TextBox2.Text; } }   
</STRONG>

然后调用Server.Transfer方法

代码如下:

<STRONG>private void Button1_Click (object sender, System.EventArgs e) { Server.Transfer("anotherwebform.aspx"); } 
</STRONG>

目标页面代码:

在anotherwebform.aspx中务必在第一句话添加


代码如下:

<%@ Reference Page="~/GCSetting.aspx" %>

然后在anotherwebform.aspx.cs中添加如下。

代码如下:

<STRONG>private void Page_Load(object sender, System.EventArgs e)
{
      //create instance of source web form
      WebForm1 wf1;
      //get reference to current handler instance
      wf1=(WebForm1)Context.Handler;
      Label1.Text=wf1.Name;
      Label2.Text=wf1.EMail;
}
</STRONG>

补充:

Response.Redirect  实现页面跳转

  功能:重定向当前客户端浏览器连接到另一个URL页面。

语法: Response.Redirect("字符串")

说明:字符串是网页URL,可以是绝对路径或相对路径。

也可以换用其重载方法Response.Redirect(“字符串”, false),若设置为true则当页面代码全部执行完毕或调用Flush或End方法后,服务器才将页面执行结果发送给客户端,否则服务器边执行边发送。ASP3.0以上版本默认值为true;Windows2000的IIS5中默认值也为true。

  Response.Redirect这个跳转页面的方法跳转速度不快,因为它要走两次回发(postback)。它可以跳转到任何页面,没有站点页面限制(可以由baidu跳转到google),但是不能跳过登录保护。速度慢是其最大的缺陷。

其跳转机制为:首先是服务器端发送一个http请求到客户端,通知需要跳转到的新页面,然后客户端再发送跳转请求到服务器端。需要注意的是跳转后内部空间保存的所有数据信息将会丢失,所以需要用到Session.

2.Response.Redirect 打开新窗口的两种方法

一般情况下,Response.Redirect 方法是在服务器端进行转向,因此除使用 Response.Write("<script>window.location='http://dotnet.aspx.cc';</script>") 方法外,其他方法暂不能在新窗口打开所指定的  URL 地址的。

但是可以通过设置 form 元素的 target 属性,还是有办法打开新窗口的。下面就是可以采用的两种方法。

方法一:在服务器端设置 target 属性,这个方法也非常适用于客户端不支持脚本的情况。代码如下:

代码如下:

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Page_Load(object sender, EventArgs e)
    {
        form1.Target = "_blank";
    }

protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body id="b" runat="server">
<form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="打开新窗口或者新 Tab " />
</form>
</body>
</html>

办法二:采用客户端脚本的方法设置 target 属性。代码如下:

代码如下:

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Attributes.Add("onclick", "this.form.target='_newName'");
    }

protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body id="b" runat="server">
<form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="打开新窗口或者新 Tab " />
</form>
</body>
</html>

上面两种方法中的 target 属性可以采用任何合法的名称,但要注意,如果相同名称的窗口已经打开,则新窗口会在已经存在名称的窗口里打开。

更新:如果需要设置弹出窗口的宽度和高度,可以修改为下面的方法:

代码如下:

<STRONG><%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Page_Load(object sender, EventArgs e)
    {
      string WindowName = "win" + System.DateTime.Now.Ticks.ToString();
      Page.RegisterOnSubmitStatement("js", "window.open('','" + WindowName + "','width=600,height=200')");
        form1.Target = WindowName;
    }

protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body id="b" runat="server">
<form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="打开新窗口或者新 Tab " />
</form>
</body>
</html>
</STRONG>

3. Server.Transfer 速度快,只需要一次postback,但它必须是在同一个站点内跳转。
Server.Transfer的重定向请求发生在服务器端,仅仅将此控件传递到新的网页并且不在客户端重新定位该网页,所以浏览器的url地址仍然是原页面的地址!另外,它能跳过登录保护。
默认情况下,Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但是如果把该方法的第二个参数设置成true,就可以保留原先页面的表单数据和查询字符串。
Server.Transfer("hyj.aspx");
//服务器停止执行本页,保存本页的当前数据后,再使页面转向hyj.aspx,并将跳转之前数据加上hyj.aspx页面执行的结果返回给浏览器。

4.Server.Execute这个方法主要是用在页面设计上,它必须是在同一个站点内跳转,也只需要一次postback。 这个方法是需要将一个页面的输出结果插入到另一个aspx页面的时候使用,大部分是在表格中将某一个页面类似于嵌套的方式存在于另一页面。 Server.Execute("hyj.aspx");//服务器保存此页的当前数据后,使页面转向到hyj.aspx执行,在hyj.aspx执行之后又返回本页继续执行,再将三者结果合并后返回给浏览器。 Execute方法跳转类似于函数调用。 如何选择页面重定向的方法: asp.net中页面跳转方式----Redirect、Transfer、Execute、超链接、HyperLink控件。 当需要把用户跳转到另一台服务器上的页面的时候 ,使用Redirect 当需要把用户跳转到非aspx页面时候,如html,使用Redirect 需要把查询字符串作为url一部分传给服务器的时候,使用Redirect,因为其他两种方法不能做到2次postback,把数据带回服务器 需要aspx页面间的转换(不涉及登录),使用Transfer 当需要把aspx页面的输出结果插入到另一个aspx页面的时候使用 Execute。 当需要用户来决定什么时候跳转页面,就使用超链接。 要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。

(0)

相关推荐

  • C#数字图像处理之图像缩放的方法

    本文实例讲述了C#数字图像处理之图像缩放的方法.分享给大家供大家参考.具体如下: //定义图像缩放函数 private static Bitmap ZoomP(Bitmap a, float s, float v) { Bitmap bmp = new Bitmap((int)(a.Width * s), (int)(a.Height * v), System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics g = Graphics.F

  • C#实现.net页面之间传值传参方法汇总

    本文实例总结了C#实现.net页面之间传值传参方法.分享给大家供大家参考.具体实现方法分析如下: 一.QueryString传值 一般来说,QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.如下面实例所示: 复制代码 代码如下: private void Button1_Click(object sender, System.EventA

  • C#判断页面中的多个文本框输入值是否有重复的实现方法

    本文实例讲述了C#判断页面中的多个文本框输入值是否有重复的实现方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: List<string> list = new List<string>();//首先定义一个泛型数组 //这里假如说有四个文本框 string mainseat = this.textBox1.Text; string nextseat = this.textBox2.Text; string storeseat1 = this.textBox3.T

  • C#实现页面GZip或Deflate压缩的方法

    本文实例讲述了C#实现页面GZip或Deflate压缩的方法.分享给大家供大家参考.具体分析如下: .NET Framework里 System.IO.Compression下有两个可用于页面压缩的类,GZipStream和 DeflateStream. 在页面被传输之前,需要获取发出请求的客户端所采用的解码形式. 可以通过Request.Headers["Accept-Encoding"]来获取. 在页面被压缩之前,需要获取页面实体主体,可通过 Response.Filter来获取(

  • C# Page用于各页面继承功能实例

    本文实例讲述了C# Page用于各页面继承功能的实现方法.分享给大家供大家参考.具体方法如下: IBasePage.cs文件如下: 复制代码 代码如下: /// <summary> /// 用于页面或用户控件 /// </summary> public interface IBasePage {         /// <summary>         /// 数据缓存类         /// </summary>         DbCache Cac

  • asp.net c# 抓取页面信息方法介绍

    一:网页更新 我们知道,一般网页中的信息是不断翻新的,这也要求我们定期的去抓这些新信息,但是这个"定期"该怎么理解,也就是多长时间需要抓一次该页面,其实这个定期也就是页面缓存时间,在页面的缓存时间内我们再次抓取该网页是没有必要的,反而给人家服务器造成压力. 就比如说我要抓取博客园首页,首先清空页面缓存, 从Last-Modified到Expires,我们可以看到,博客园的缓存时间是2分钟,而且我还能看到当前的服务器时间Date,如果我再次 刷新页面的话,这里的Date将会变成下图中 I

  • C#设置页面单位和缩放的方法

    本文实例讲述了C#设置页面单位和缩放的方法.分享给大家供大家参考.具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace advanced_drawing { public partial cl

  • C# 实现抓取网站页面内容的实例方法

    抓取新浪网的新闻栏目,如图所示: 使用 谷歌浏览器的查看源代码: 通过分析得知,我们所要找的内容在以下两个标签之间: 复制代码 代码如下: <!-- publish_helper name='要闻-新闻' p_id='1' t_id='850' d_id='1' --> 内容.... <!-- publish_helper name='要闻-财经' p_id='30' t_id='98' d_id='1' --> 如图所示: 内容.... 使用VS建立一个如图所示的网站: 我们下载

  • C#页面之间跳转功能的小结

    引言   ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递值,同样的事情,在使用事件驱动编程模型的ASP.NET就不是那么容易了,当然了,我们仍然有一些方法可以实现同样的功能.本文将试着使用不同的可能的方法来解决这个问题,但可以预见是,本文将包含使用querystring,session变量以及server.Transfer方法来实现页面间的值传递. 使用Q

  • vue如何实现本项目页面之间跳转

    目录 本项目页面之间跳转方式 在template模板中添加 在methods中写入路径 修改路由文件 vue解决页面跳转问题 解决办法 本项目页面之间跳转方式 在template模板中添加 button按钮加入click事件 <el-button type="primary" @click="func()">添加试题</el-button> 在methods中写入路径 func() { this.$router.push({ path: &q

  • Android编程中Intent实现页面跳转功能详解

    本文实例讲述了Android编程中Intent实现页面跳转功能.分享给大家供大家参考,具体如下: 安卓四大组件:Activity.Service.Broadcast Receiver.Content Provider Intent实现页面之间跳转 1.无返回值 startActivity(intent) 2.有返回值 startActivityForResult(intent,requestCode); onActivityResult(int requestCode,int resultCod

  • 详解ASP.NET 页面之间传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有3-5年经验的,有5-10年经验的,对于所有的面试者,我几乎问了同一道题:"请说说你所知道的页面之间传值的几种形式和方法,并阐述他们的原理和过程",关于这道题,从大家的回答来看,结果并不是很理想,从种类上来说,大部分人回答5种左右,极少部分能回答8种,没有超过8种的,但从深度上来说,很少有

  • 详解Android Activity之间跳转出现短暂黑屏的处理方法

    摘要: 如何解决页面之间跳转时的黑屏问题呢? 在默认情况下,Android应用程序启动时,会有一个黑屏的时期.原因是,首个activity会加载一些数据,比如初始化列表数据.向服务器发送请求获取数据等等.同样,使用startActivity(intent)方法从一个Activity进入到新的Activity时,这个过程中也会出现短暂的黑屏.这个问题的存在是由Android应用框架决定的,但的确很影响用户体验.下面就动手来解决这个黑屏 问题! 第一步:自定义Theme(主题) 在your_proj

  • 微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法

    本文实例讲述了微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法.分享给大家供大家参考,具体如下: 很多项目都会有消息记录页,即列表页,紧接着就是点击列表的某一项进入到消息的详情页,这里承接上一篇文章,继续分享如何从列表的item项跳转到下一个页面. 一.效果图 从左边的列表页调到右边的详情页 二.页面之间的跳转 首先要看的是页面的跳转,微信小程序有三种跳转方式可供选择: 1.保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面. wx.navi

  • jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】

    本文实例讲述了jQuery实现浏览器之间跳转并传递参数功能.分享给大家供大家参考,具体如下: one.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdn.bootcss.com/jquery/2.2.2/jquery.slim.js">&l

  • Vue实现关联页面多级跳转(页面下钻)功能的完整实例

    背景 在项目开发过程中,经常会遇到从上一个页面跳转到下一个页面的需求,俗称 下钻 .比如在概览页面的数据,需要查看详情,点击某个图表或按钮,即可跳转到详情页面查看详情数据. 目前为止,我们的项目中还没有一个统一的页面跳转方法,实现页面跳转的方式也因人而异,并且现有的很多项目只能在两个页面之间来回跳转,基本没有完整的实现多个页面互相跳转的功能. 关联页面跳转做为项目的常用功能,并且执行的都是重复性高的代码逻辑,非常有必要把相关的逻辑抽出来,封装成简单易用的公共方法和公共组件. 目的 统一各个项目的

  • JS中页面与页面之间超链接跳转中文乱码问题的解决办法

    在原页面一张图片上添加了一个链接,链接中有中文,于是出现下面的情况: 解决办法是在tomcat的server.xml文件的中加入URIEncoding="utf-8",如下: <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443&q

  • jsp中页面之间的跳转forward与sendRedirect的区别

    页面之间的跳转可以通过两种方式实现:forward和sendRedirect. forward:可以在JSP页面中使用,可以在Servlet中实现. 在JSP页面中使用<jsp:forward page="目标文件"/>,例如要跳转到userlist.jsp,可以写: 复制代码 代码如下: <jsp:forward page="userlist.jsp"/> 在Servlet中使用RequestDispatcher的forward方法,要跳转

随机推荐