0
点赞
收藏
分享

微信扫一扫

.net的几种传值方式


第一种方法:
通过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里不可以了.可以是基于安全的吧.

举报

相关推荐

0 条评论