您的位置:首页 > 其它

.net中两个页面之间传值的方

2011-08-15 17:16 507 查看
使用QueryString

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

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

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

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

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

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

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

源页面代码:

private void Button1_Click

(object sender, System.EventArgs e)

{

string url;

url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;

Response.Redirect(url);

}

目标页面代码:

private void Page_Load

(object sender, System.EventArgs e)

{

Label1.Text=Request.QueryString["name"];

Label2.Text=Request.QueryString["email"];

}

使用Session变量

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

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

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

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

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

5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它

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

源页面代码:

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");

}

目标页面代码:

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");

}

使用Server.Transfer

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

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

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

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

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

5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了

以下代码综合实现上述步骤过程的代码:

源页面代码:

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

public string Name

{get

{return TextBox1.Text;}

}

public string EMail

{

get

{

return TextBox2.Text;

}

}

然后调用Server.Transfer方法

private void Button1_Click

(object sender, System.EventArgs e)

{

Server.Transfer("anotherwebform.aspx");

}

目标页面代码:

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;

}

在ASP.NET 2.0中启用了跨页面传送功能,其功能和用法在以后在做介绍!

页面之间传递值

方式1:

在接收页 的html代码里加上一行: <%@ Reference Page = "WebForm1.aspx" %>

WebForm1 fp=(WebForm1)Context.Handler;

this.TextBox1.Text=fp.name; //name 是第一页的public变量

Context 提供对整个当前上下文(包括请求对象)的访问。您可以使用此类共享页之间的信息。

方式2:GET方式

在发送页

public int sum=0;

int i =int.Parse(this.TextBox1.Text)*2;

Server.Transfer("WebForm2.aspx?sum="+i);

接收页

this.TextBox1.Text=Request["sum"].ToString();

or this.TextBox1.Text=Request.Params["sum"].ToString();

this.TextBox1.Text=Request.QueryString["sum"];

方法3:全局变量

发送页:

Application["sum"]=this.TextBox1.Text;

Server.Transfer("WebForm2.aspx");

接收页:

this.TextBox1.Text=(string)Application["sum"];

Application实质上是整个虚拟目录中所有文件的集合,如果想在整个应用范围内使用某个变量值,Application对象将是最佳的选择

在这里用Session[""]的方法雷同

方法4:

发送页:

1.定义静态变量: public static string str="";

2. str=this.TextBox1.Text;

Server.Transfer("webform2.aspx");

接收页:

1.引入第一页的命名空间:using WebApplication1;

2 this.TextBox1.Text=WebForm1.str;

如果在两个页面间需要大量的参数要传传递,如数据查询等页面时,用1 - 6的方法传值及其不便,而第 7 种方法确有一独特的优势!但使用该方法时需要一定的设置,现简单介绍一下该方法的使用方式:

以查询数据页面为例:

在查询页面中设置如下公有属性(QueryPage.aspx):

复制代码 代码如下:

public class QueryPage : System.Web.UI.Page

{

protected System.Web.UI.WebControls.TextBox txtStaDate;

protected System.Web.UI.WebControls.TextBox txtEndDate;

/// <summary>

/// 开始时间

/// </summary>

public string StaDate

{

get{ return this.txtStaDate.Text;}

set{this.txtStaDate.Text = value;}

}

/// <summary>

/// 结束时间

/// </summary>

public string EndDate

{

get{ return this.txtEndDate.Text;}

set{this.txtEndDate.Text = value;}

}

.

private void btnEnter_Click(object sender, System.EventArgs e)

{

Server.Transfer("ResultPage.aspx");

}

}

在显示查询结果页面(ResultPage.aspx):

复制代码 代码如下:

public class ResultPage : System.Web.UI.Page

{

private void Page_Load(object sender, System.EventArgs e)

{

//转换一下即可获得前一页面中输入的数据

QueryPage queryPage = ( QueryPage )Context.Handler;

Response.Write( "StaDate:" );

Response.Write( queryPage.StaDate );

Response.Write( "<br/>EndDate:" );

Response.Write( queryPage.EndDate );

}

}

三、如果有许多查询页面共用一个结果页面的设置方法:

在这种方式中关键在于“ QueryPage queryPage = ( QueryPage )Context.Handler; ”的转换,只有转换不依赖于特定的页面时即可实现。

如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作!

1、先定义一个类,用该类放置所有查询参数:

复制代码 代码如下:

/// <summary>

/// 结果页面中要用到的值

/// </summary>

public class QueryParams

{

private string staDate;

private string endDate;

/// <summary>

/// 开始时间

/// </summary>

public string StaDate

{

get{ return this.staDate;}

set{this.staDate = value;}

}

/// <summary>

/// 结束时间

/// </summary>

public string EndDate

{

get{ return this.endDate;}

set{this.endDate = value;}

}

}

2、接口定义:

复制代码 代码如下:

/// <summary>

/// 定义查询接口。

/// </summary>

public interface IQueryParams

{

/// <summary>

/// 参数

/// </summary>

QueryParams Parameters{get;}

}

3、查询页面继承IQueryParams接口(QueryPage.aspx):

复制代码 代码如下:

/// <summary>

///查询页面,继承接口

/// </summary>

public class QueryPage : System.Web.UI.Page, IQueryParams

{

protected System.Web.UI.WebControls.TextBox txtStaDate;

protected System.Web.UI.WebControls.TextBox txtEndDate;

private QueryParams queryParams;

/// <summary>

/// 结果页面用到的参数

/// </summary>

public QueryParams Parameters

{

get

{

return queryParams;

}

}

.

private void btnEnter_Click(object sender, System.EventArgs e)

{

//赋值

queryParams = new QueryParams();

queryParams.StaDate = this.txtStaDate.Text;

queryParams.EndDate = this.txtEndDate.Text

Server.Transfer("ResultPage.aspx");

}

}

4、别外的页面也如此设置

5、接收页面(ResultPage.aspx):

复制代码 代码如下:

public class ResultPage : System.Web.UI.Page

{

private void Page_Load(object sender, System.EventArgs e)

{

QueryParams queryParams = new QueryParams();

IQueryParams queryInterface;

//实现该接口的页面

if( Context.Handler is IQueryParams)

{

queryInterface = ( IQueryParams )Context.Handler;

queryParams = queryInterface.Parameters;

}

Response.Write( "StaDate:" );

Response.Write( queryParams.StaDate );

Response.Write( "<br/>EndDate:" );

Response.Write( queryParams.EndDate );

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: