经常在开发中遇到一个问题,上一个页面需要向下面一个页面传递一些值以做出不同的处理,如果数量比较少的话可以用在要传递的页面后面加?然后写参数,但是如果需要传递的值很多很多,或者理解为一个数组,这个时候应该怎么办呢?如果在第一个页面中用一个全局静态数组是可以,但是这种做法显然是不合要求的,在多人同时情况下就出错了,正确的做法应该怎么弄呢?传递一个数组名过去好像也不行,.net中好像不流行指针....另外:一个页面中定义了一个字段并给他赋值(不是static形的),但是只要一点任何一个按钮后这个值就不在了,也就是说post了一次以后类被重新初始化了,所有的字段也清空了,如果我想保留一些临时数据又不想放到数据库中,该怎么办?用xml?或者新建立一个类? 小弟太笨,分都问光了,-_-!最后那么点分了,还是希望大家可以帮忙,谢谢!!
Server.transfer().
具体用法查一下就行了
2.可以用. ViewState["名"] = 存的值
ASP.NET页面间的传值的几种方法
作者:Powered by DvNews.net 来自:http://www.uncj.net/news/show.aspx?id=69 ASP.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦。在这里,我们可以通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QueryString来传送相应的值,再一种是通过session变量来传送相应的值,还有就是通过Server.Transfer方法来实现。下面分别一一介绍: 一、使用Querystring
Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
private void Button1_Click
(object sender, System.EventArgs e)
{
string url;
url="webform2.aspx?name=" +
TextBox1.Text + "&email=" +
TextBox2.Text;
Response.Redirect(url);
}
4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}
运行,即可看到传递后的结果了。 二、使用Session变量 使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
private void Button1_Click
(object sender, System.EventArgs e)
{
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Response.Redirect("webform2.aspx");
}
4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:
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、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
private void Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("webform2.aspx");
}
4、创建过程来返回TextBox1,TextBox2控件的值代码如下:
public string Name
{
get
{
return TextBox1.Text;
}
} public string EMail
{
get
{
return TextBox2.Text;
}
}
5、新建一个目标页面命名为webform2
6、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:
private void Page_Load
(object sender, System.EventArgs e)
{
//创建原始窗体的实例
WebForm1 wf1;
//获得实例化的句柄
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail; }
运行,即可看到传递后的结果了。
ViewState和用Session或Cashe有什么区别吗?
session是服务器段保存的数据,它通过浏览器访问时产生的sessionid来确定状态,它的所有内容都保存在服务器上,而且会在session过期前一直保留,比较占用服务器空间,如果你的系统的并发数比较少,随便用session无所谓,如果同时在线超过1000的话,就不要用了,服务器会死的很惨。
cache不太清楚,没有用过。网址传送的数据很有限,上百个数据肯定不适用,一个一个写可以用循环,不会很累。
如果传递一个数组,还是用viewstate或session吧,具体什么情况用哪个我前面已经说了。
经常在开发中遇到一个问题,上一个页面需要向下面一个页面传递一些值以做出不同的处理,如果数量比较少的话可以用在要传递的页面后面加?然后写参数,但是如果需要传递的值很多很多,或者理解为一个数组,这个时候应该怎么办呢?
如果你以前用过asp、jsp、php、pl、cgi等等就不会有此一问了,常规的做法,页面提交多数都是提交给下一个页面而非当前页面的,只有到.NET出现后,才会让大家以为,所有内容都是提交给自己的。
当然,.NET里面也可以模仿以前的方法,把页面内容提交到下其他页面,但是这时候,form的runat属性就要去掉,而且原来没有的action、method属性都要添上。
其实提交是要传输很多东西的,比如我这里发出回复,页面就要把文本框里全部文字都提交上去,这可不比你的数组内容少吧。如果在第一个页面中用一个全局静态数组是可以,但是这种做法显然是不合要求的,在多人同时情况下就出错了,正确的做法应该怎么弄呢?传递一个数组名过去好像也不行,.net中好像不流行指针....
正确的做法就是提交到一个新的页面里,而不是在当前页面处理,也可以说,这个aspx页完全可以改成html页。另外:一个页面中定义了一个字段并给他赋值(不是static形的),但是只要一点任何一个按钮后这个值就不在了,也就是说post了一次以后类被重新初始化了,所有的字段也清空了,如果我想保留一些临时数据又不想放到数据库中,该怎么办?用xml?或者新建立一个类?
这个是必然的,网页无连接,服务器把页面传给你以后就把相关内存全部释放了,不会保留。你保留这些临时数据就用几种方法:cookie、viewstate、session。用xml或者新建类都不行。
.Net技术讨论群14272327,欢迎菜鸟们加入,欢迎高手指导~
只要在使用的时候,用ctype函数把它再重新指定回某个数据类型就可以了。