欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

asp.net如何实现不同页面之间的属性值传递

创建时间:2011年07月20日 22:32  阅读次数:(7376)
分享到:
很多时候我们都需要用到页面之间的值的传递,session当然是一个不错的选择,但如果要传的数据比较大的时候,或者要传整个当前面的数据的时候,session就不太好使了。其实,asp.net不同页面之间的传值,还有很多其它的方法,特摘抄如下,当然,很多时候,以下的某些方法也不太好使,比如页面用了UpdatePanel时,很多就异想不到的问题就会涌现出来了,不过这些则需要读者自己慢慢去调试了。

asp.net如何实现不同页面之间的属性值传递
主要是设置PostBackUrl属性值,设置为你所需要跳转页面的名称("~/Default2.aspx"),然后再("~/Default2.aspx")页面中用PreviousPage.FindControl()方法找到所需要当前页的控件。

一、使用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"];
}

代码:
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %  >

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.3ppt.com"  >

<html xmlns="http://www.w3.org/1999/xhtml"  >
<head runat="server"  >
<title  >第一个页面</title  >
</head  >
<body  >
<form id="form1" runat="server"  >
<div  >

<asp:TextBox ID="TextBox1" runat="server"  ></asp:TextBox  >
<br /  >
<asp:Button ID="Button1" runat="server" Text="跳转" PostBackUrl="~/Default2.aspx" /  >

</div  >
</form  >
</body  >
</html  >

第二个页面的CS文件
Default2.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
TextBox tex = (TextBox)PreviousPage.FindControl("TextBox1");
Response.Write(tex.Text);
}

二、Post方法
方式:通用的方式。利用form提交。
特点:最常用的方法。常用技巧是把隐秘的数据存在隐藏域中由form提交。
适用数据:大量数据,包括文件上传。
适用范围:同Get方法
用法:在客户端form指定action目标后submit、在asp.net的伺服端中使用server.Transfer(url)提交;在伺服端中用Request.Form["FormFieldID"]获取。

1、表单提交,
<form action= "target.aspx" method = "post" name = "form1"  >
<input name = "param1" value = "1111"/  >
<input name = "param2" value = "2222"/  > 
</form  >

....
form1.submit();
....

此种方在ASP。NET中无效,因为ASP。NET的表单总是提交到自身页面,如果要提交到别一页面,需要特殊处理。
2、<A href="target.aspx?param1=www.3ppt.com?m2=www.3ppt.com"  >链接地址传送</A  >
接收页面: string str = Request["param1"]

3、Session共享
使用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");
}

发送页面:Session("param1") = "www.3ppt.com"; 
按收页面 string str = Session("param1").ToString(); 

4、Application共享
发送页面: Application("param1") = "www.lmwlove.com"; 
按收页面: string str = Application("param1").ToString(); 
此种方法不常使用,因为Application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方。

使用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();
}
ft.NET\Framework\<版本>\CONFIG 目录下的 Machine.config 和 Web.config 文件继承所?
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 81+25=? 的结果(结果是:106)
结  果: