第一种方法: 通过URL链接地址传递 send.aspx: protected void Button1_Click(object sender, EventArgs e) { Request.Redirect("Default2.aspxusername=honge"); } receive.aspx: string username = Request.QueryString["username"];这样可以得到参数值。第二种方法: 通过post方式。 send.aspx
receive.aspx string username = Ruquest.Form["receive"]; 第三种方法: 通过session send.aspx: protected void Button1_Click(object sender, EventArgs e) { Session["username"] = "honge"; Request.Redirect("Default2.aspx"); } receive.aspx: string username = Session["username"];这样可以得到参数值。第四种方法: 通过Application send.aspx: protected void Button1_Click(object sender, EventArgs e) { Application["username"] = "honge"; Request.Redirect("Default2.aspx"); } receive.aspx: string username = Application["username"];这样可以得到参数值。第五种方法: 通过Server.Transfer send.aspx: public string Name { get { return "honge"; } } protected void Button1_Click(object sender, EventArgs e) { Server.Transfer("Default2.aspx"); } receive.aspx: send d = Context.Handler as send ; if (d != null) { Response.Write(d.Name);这样可以得到参数值。 }如果在asp.net 2.0中还可以这样用:通过PreviousPage PreviousPage d = Context.Handler as PreviousPage ; if (d != null) { Response.Write(d.Name);这样可以得到参数值。 } 也可以这样用: send.aspx:
receive.aspx:
string name = PreviousPage.Name;这样可以得到参数值。如果你的页面中用到了MasterPage的话 Server.Transfer 传递的 PreviousPage就无效了,不知道这是什么原因.所以在用到MasterPage的话,最好用Session或是Context.Items["username"]来实现. 大多数人使用 Response.Redirect 将用户引导到另一个页面,而另一些人好像偏爱于神秘的 Server.Transfer,那么,这二者有什么区别? Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面。你可以使用下面的代码将用户引导到另一个页面:Response.Redirect("WebForm2.aspx")或者Response.Redirect("http://www.163.com/") Server.Transfer 也是通过一条语句将用户引导到另一页面,比如:Server.Transfer("WebForm2.aspx")。不过,这条语句有一系列独特的优缺点。 首先,通过 Server.Transfer 引导到另一页面保留服务器资源,通过更改服务器端“焦点”和传输请求来代替告诉浏览器重定向,这就意味着你不会占用较多的 HTTP 请求,因此这可以减轻服务器的压力,使你的服务器运行更快。 不过,请注意,由于 "transfer" 只能在同一服务器端的同一站点间运行,所以你不能用 Server.Transfer 将用户重定向到另一服务器上的站点。要重定向到服务器以外的站点,只有 Response.Redirect 能办到。 其次,Server.Transfer 保留浏览器端的 URL 地址。这对流线型的数据输入很有帮助,不过这也增加了调试的复杂度。 还有:Server.Transfer 方法还有另一个参数——"preserveForm"。如果你设置这个参数为 True,比如:Server.Transfer("WebForm2.aspx", True), 那么 query string 和任何 form 变量都会同时传递到你定位的页面。 例:WebForm1.aspx 有一个文本框名为 TextBox1,你利用 preserveForm 为 True 传递到 WebForm2.aspx,你仍然可以用 Request.Form("TextBox1") 来取得文本框的值。 这种技术对向导式的多页面输入很有用. 总结:Response.Redirect 简单地告诉浏览器访问另一个页面。Server.Transfer 有利于减少服务器请求,保持地址栏 URL 不变,允许你将 query string 和 form 变量传递到另一个页面。 另外表单Post的提交方式在Response.Redirect下是没有用的. 在使用Server.Transfer时还可以通过Context来传值.比如在webform1里添加一个context的item: this.Context.Items.Add("test", "abcdef"); 那么就可以在webform2里能过下列代码得到这个item值 this.Context.Items["test"].ToString() 我记得在VS 2003里还可以在Server.Transfer下通过this.Context.Handler来获得webform1页面类的一个实例,从而可以访问里面对象,属性等.但在VS 2005里好像没办法获得webform1的页面类.请哪位高人指点一下. VS 2003是可以这样申请一个webForm1的实例的: 在webform2里 WebForm1 form1=(WebForm1)this.Context.Handler; 好象还是可以直接New 一个的:webform1 form1=new webform1(); 不知道VS 2005里不可以了.可以是基于安全的吧. |