首页 > 其他 > 详细

转:C#页面传值

时间:2014-02-21 21:38:38      阅读:412      评论:0      收藏:0      [点我收藏+]

 

     

1

。使用

QueryString 

      

使用

QuerySting

在页面间传递值已经是一种很老的机制了,这种方法的主

要优点是实现起来非常简单,

然而它的缺点是传递的值是会显示在浏览器的地址

栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高

的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下

1

,使用控件创建

web

表单(

form

 

2

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

 

3

,在按钮或链接按钮的单击事件里创建一个保存

URL

的字符变量

 

4

,在保存的

URL

里添加

QueryString

参数

 

5

,使用

Response.Redirect

重定向到上面保存的

URL 

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

 

  

源页面

WebForm1.aspx.cs

中的部分代码:

 

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

     

string url; 

     

url="WebForm2.aspx?name=" + TextBox1.Text + "&email=" + 

TextBox2.Text; 

     

Response.Redirect(url); 

 

目标页面

WebForm2.aspx.cs

中的部分代码:

 

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

     

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

     

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

 

2

。使用

Session

变量

 

      

使用

Session

变量是可以在页面间传递值的的另一种方式,

在本例中我们把

控件中的值存在

Session

变量中,

然后在另一个页面中使用它,

以不同页面间实

现值传递的目的。

但是,

需要注意的是在

Session

变量存储过多的数据会消耗比

较多的服务器资源,在使用

session

时应该慎重,当然了,我们也应该使用一些

清理动作来去除一些不需要的

session

来降低资源的无谓消耗。

使用

Session

量传递值的一般步骤如下:

 

1

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

 

2

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

 

3

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

session

变量里

 

4

,使用

Response.Redirect

(或

Server.Transfer)

方法重定向到另一个页面

 

5

,在另一个页面提取

session

的值,在确定不需要使用该

session

时,要显式

清除它

 

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

 

   

源页面

WebForm1.aspx.cs

中的部分代码:

 

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("WebForm2.aspx"); 

  

目标页面

WebForm2.aspx.cs

中的部分代码:

 

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

3.

使用

Server.Transfer

 

      

这个方法相比上面介绍的方法稍微复杂一点,

但在页面间值传递中却是特别

有用的,

使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,

然了,

使用这种方法,

你需要额外写一些代码以创建一些属性以便可以在另一个

页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种

方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:

 

1

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

 

2

,创建返回值的

Get

属性过程

 

3

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

 

4

,在按钮单击事件处理程序中调用

Server.Transfer

方法转移到指定的页面

 

5

,在第二个页面中,我们就可以使用

Context.Handler

属性来获得前一个页面

实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了

 

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

 

  

源页面

WebForm1.aspx.cs

中的部分代码

    

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

 

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("WebForm2.aspx"); 

   

目标页面代码:

 

WebForm2.aspx

中务必在第一句话添加

 

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

 

<%@ PreviousPageType VirtualPath="~/WebForm1.aspx" %>

 

然后在

WebForm2.aspx.cs

中添加如下。

 

 

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; 

如果在调试的过程中遇到错误

.

就到

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 

Files

中把新建的网站名的文件夹删掉

.(

要先关掉

Visual Studio

开发环境再删

4.

使用

@PreviousPageType

指令

 

      

这个指令是

.net 2.0

中的一个新指令

,

用于处理

ASP.NET 2.0

提供的跨页面

传送新功能

.

用于批定跨页面的传送过程起始于哪个页面

.

包含两个属性

TypeName:

设置回送时的派生类名

 

VirtualPath:

设置回送时所传送页面的地址

如下示例

源页面

WebForm1.aspx

中有一个

TextBox,ID

txtName.

WebForm1.aspx.cs

中设置一个属性

public TextBox Name 

    

get{return this.txtName;}//

返回一个控件对象

 

在目标页面的设计文件中

(WebForm2.aspx)

的最上方加上

 <%@ PreviousPageType VirtualPath="~/Page1.aspx"%>, 

然后就能引用

WebForm1.aspx

中定义的属性了

WebForm2.aspx.cs

中可以有如下引用形式

(

假设

WebForm2.aspx

中有一个

ID

lblName

Label): 

lblName.Text="Hello"+PreviousPage.Name.Text+"<br />"; 

 5.

利用某些控件的

PostBackUrl

属性

 

示例

:

仍然是源页面

WebForm1.aspx

和目标页面

WebForm2.aspx. 

WebForm1.aspx

中的部分代码

<asp:Button ID="btnPostBack" Runat="server" 

Text="PBButton"></asp:Button> 

<asp:TextBox ID="txtName" Runat="server" ></asp:TextBox> 

<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar> 

WebForm2.aspx.cs

中的部分代码

protected void Page_Load(object Sender,System.EventArgs e) 

    TextBox txtName; 

    Calendar calendar1; 

    

txtName=(TextBox)PreviousPage.FindControl("txtName"); 

    

calendar1=(Calendar)PreviousPage.FindControl("Calendar1"); 

    

Label.Text="Hello,"+txtName.Text+calendar1.SelectedDate.ToShortDateSt

ring(); 

使用这种方法存在一个问题

:

如果在没有单击那个按钮之前

,

也就是未处理

WebForm1.aspx

之前

,

有人请求了

WebForm2.aspx,

该怎么办

?

这就需要在

WebForm2.aspx

中的代码处理之前加一个判断

.

使用

IsCrossPagePostBack

,

这与

IsPostBack 

属性很相似

,

它允许检查请求是否来自

WebForm1.aspx.

protected void Page_Load(object Sender,System.EventArgs e) 

    

if(PreviousPage.IsCrossPagePostBack) 

    

        

TextBox txtName; 

        

Calendar calendar1; 

     

   

txtName=(TextBox)PreviousPage.FindControl("txtName"); 

     

   

calendar1=(Calendar)PreviousPage.FindControl("Calendar1"); 

     

   

Label.Text="Hello,"+txtName.Text+calendar1.SelectedDate.ToShortDat

eString(); 

    

    

else 

    

        

Response.Redirect("WebForm1.aspx"); 

    

6.  

使用

Cookie

对象变量

 

 

 

这个也是大家常使用的方法,

Session

一样,

是对每一个用户而言的,

是有个本质的区别,即

Cookie

是存放在客户端的,而

session

是存放在服务器

端的。而且

Cookie

的使用要配合

ASP.NET

内置对象

Request

来使用。

 

a.aspx

C#

代码

 

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

    

HttpCookie cookie_name = new HttpCookie("name"); 

    

cookie_name.Value = Label1.Text; 

    

Reponse.AppendCookie(cookie_name); 

    

Server.Transfer("b.aspx"); 

b.aspx

C#

代码

 

private void Page_Load(object sender, EventArgs e) 

    

string name; 

    

name = Request.Cookie["name"].Value.ToString(); 

7.  

使用

Application 

对象变量

 

 

 

Application

对象的作用范围是整个全局,也就是说对所有用户都有效。其

常用的方法用

Lock

UnLock

 

a.aspx

C#

代码

 

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

    

Application["name"] = Label1.Text; 

    

Server.Transfer("b.aspx"); 

b.aspx

C#

代码

 

private void Page_Load(object sender, EventArgs e) 

    

string name; 

    

Application.Lock(); 

    

name = Application["name"].ToString(); 

    

Application.UnLock(); 

}

转:C#页面传值

原文:http://www.cnblogs.com/johnsg/p/3559086.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!