以前总觉得页面传值是个很难的事情,今天才知道原来方法那么多!Session,Application,Cookies,QueryString,Server.Transfer,当页面内在刷新时,会将有些值丢失,这个时候可以使用ViewState!哇,如此多的方法。。。。。。
1.QueryString
最简单的页面之间传值的方式,缺点是会把要传的值显示在浏览器的地址栏里,因此一般是传不重要而且简单的参数值!不能传递对象,参数的长度不能大于1024字节,当参数中有中文的时候,需要使用HttpUlitity.UrlEncode方法来对参数进行编码和解码!
Default1:Response.Redirect("Default.aspx?a="参数值"");
Default2:Request.Querystring["a"]; 或者 Request["a"]; 都可以获取到参数值!
2.Session
此方式不仅可以将值传递到下一个页面,还可以将值交叉传递到多个页面,直到把Session变量的值Remove,变量才会消失;缺点是Session变量是存储在服务器端的,消耗服务器端的内存使用,客户端通过ID传回到服务器短检索Session变量值,由于Session存在TimeOut的问题,所以对客户的操作会产生影响!如果服务器端的内存不足时,可能引起Session的崩溃!所以在大的系统里不建议使用这个!
Default1:Session["a"] = b;
Default2:string C = Convert.ToString(Session["a"]);
3.Server.Transfer
稍微复杂一点,也麻烦一点!可是这种方式不会让你传的值在浏览器的地址栏里显示,是一种比较保险的传参方式,
还可以传递对象,使用这种方式要额外的写一些代码,用以创建一些属性,以便在下一个页面访问它!总体说来,使用这种方法是简洁的,同时是面向对象的!
使用这种方法的整体过程如下:
a.在页面添加必要的空间;
b.创建返回值的Get属性;
C.创建可以返回表单的按钮;
d.在按钮单击事件中调用Server.Transfer方法转移到指定的页面;
e.在第2个页面中,我们就可以用Context.Handler属性来获取前一个页面实例对象的使用;
综合实现上述步骤的代码如下:
源页面代码:
//创建返回值的Get属性
public string Name
{
get{ return TextBox1.Text}
}
//调用Server.Transfer方法
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;
}
其中WebForm1为你前面定义的CS中的页面名称,可以根据自己的需要进行设置;
4.Application
一般是相对于整个项目来说,相对静止的变量,如数据库连接变量,而那些针对每一个用户,每一个会话都有不同的变量的则不适用。通常Application的值在Configure中设置。也可以在Global.asx中指定。
因为应用程序和他存储的所有对象可以由不同的线程进行访问,所以最好只将很少修改的数据与应用程序范围一起存储。
Default1:Application["a"] = b;
Default2:string C = Application["a"] .ToString();
这是Application最简单的赋值和取值方式了,还可以传递对象、流化等等,我不是很明白,以后再补充!请那位知道的介绍些个知识让我学习一下!
5.Cookies
被称之为小甜点,存储在客户端是Asp.Net的会话状态将请求与会话关联的方式之一(还有一种是把值保存在浏览器的变量中,当浏览器关闭时结束)。也可以直接用于在请求之间存储数据,但随后数据将存储在客户端,并随每个请求一起传送到服务器端,浏览器对Cookies的大小有限制,只有小于4096字节的才能保证被接受!除了大小受限之外,还有不能保存对象,存在生命周期等缺点。
Default1:
System.Web.HttpCookie hc = new HttpCookie("hc");
hc.Value = "hc" + TextBox4.Text;
Response.AppendCookie(hc);
Default2:string hc = Request.Cookies["hc"].Value.ToString()
6.ViewState
在一个页面的事件发生之后,页面可能被刷新,如果定义全局变量会被清零!这个时候就会用到ViewState,即ViewState是本页面函数直接的传值!它是保存在浏览器的Html代码中,随着页面的关闭,值消失!
Default1:ViewState["hc"] = hc;
Default2:string hc = ViewState["hc"].ToString();
小结:
1.使用Application存储很少修改但经常使用的数据;
2.使用Server.Transfer存储特定于某个会话或用户的数据,数据全部存储在服务器上,适合于存储短期、大量、敏感的数据;
3.将少量易失的数据存储在非持久的Cookies中,数据存储在客户端,当每次请求时发送到服务器,并在客户端执行完请求后失效;
4.将少量非易失的数据存储在持久的Cookies中,数据存储在客户端,知道失效,并在每次请求时发送到服务器端;
5.将少量请求特定的数据存储在ViewState中,数据从服务器短发送到客户端并返回到当前页面。