A SP.NE T页面之间传递值的几种方式
页面传值是学习asp.net初期都会面临的一个问题总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说常用的较简单有QueryStringSes sionCookiesApp lication Server.Transfer。
一、 QueryString. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
二、 Session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
三、 Cookie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
四、Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
五、 S erver.Transfer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
六、表单提交. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
七、 viewstate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
八、 PostBac kUr l()方法类似于form的post方式和s erver.trans fer方式错误未定义书签。
一、 QuerySt ring
QueryString是一种非常简单的传值方式他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时可以使用这个方法。但是对于传递数组或对象的话就不能用这个方法了。
这种方法的优点 1.使用简单对于安全性要求不高时传递数字或是文本值非常有效。
这种方法的缺点 1.缺乏安全性 由于它的值暴露在浏览器的URL地址中的。
2.不能传递对象。
使用方法 1.在源页面的代码中用需要传递的名称和值构造URL地址。
2.在源页面的代码用Respons e.Redirect(URL);重定向到上面的URL地址中。
3.在目的页面的代码使用Request.QueryString["name"];取出URL地址中传递的值。
例子 (1)a.aspx //发送页面private void Button1_Click(object sender,System.EventArgs e)
{string s_url;s_url="b.aspx?name="+Label1.Text;
Response.Redirect(s_url);
}
(2)b.aspx //接收页面private void Page_Load(object sender,EventArgs e)
{
Labe l2.Text=Reques t.QueryString[];
}
想必这个肯定是大家使用中最常见的用法了其操作与Application类似作用于用户个人所以过量的存储会导致服务器内存资源的耗尽。
优点 1.使用简单不仅能传递简单数据类型还能传递对象。
2.数据量大小是不限制的。
缺点 1.在Session变量存储大量的数据会消耗较多的服务器资源。
2.容易丢失。
使用方法 1.在源页面的代码中创建你需要传递的名称和值构造Session变量:Session["Name"]="Value(Or Object)";
2.在目的页面的代码使用Session变量取出传递的值。 Result =Session["Nmae"]
注意 session不用时可以销毁它销毁的方法是
清除一个 Ses sion.Remove(;
清除所有 Session.Clear();
例子 (1)a.aspx //发送页面private void Button1_Click(object sender,System.EventArgs e)
{
Ses sion["name"]=Labe l.Text;
} (2)b.aspx //接收页面private void Page_Load(object sender,EventArgs e)
{string name;name=Session["name"].ToString();
}
三、 Cookie
这个也是大家常使用的方法 Cookie用于在用户浏览器上存储小块的信息保存用户的相关信息 比如用户访问某网站时用户的ID用户的偏好等用户下次访问就可以通过检索获得以前的信息。所以Cookie也可以在页面间传递值。 Cookie通过HTTP头在浏览器和服务器之间来回传递的。 Cookie只能包含字符串的值如果想在Cookie存储整数值那么需要先转换为字符串的形式。
与Session一样其是什对每一个用户而言的但是有个本质的区别即Cookie是存放在客户端的而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
优点 1.使用简单是保持用户状态的一种非常常用的方法。比如在购物网站中用户跨
多个页面表单时可以用它来保持用户状态。
缺点 1.常常被人认为用来收集用户隐私而遭到批评。
2.安全性不高容易伪造。
写值
Response.Cookies["hsh"] ["a"] = TextBox1.Text;
Response.Cookies["hsh"] ["b"] = TextBox2.Text;
读值if (Request.Cookies["hsh"] != null)
{
TextBox1.Text = Request.Cookies["hsh"] .Values["a"] .ToString() ;
TextBox2.Text = Request.Cookies["hsh"] .Values["b"] .ToString() ;
}
四、Application
Application对象的作用范围是整个全局也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的类似于使用全局变量一样所以可以在不同页面中对它进行存取。它和Session变量的区别在于前者是所有的用户共用的全局变量后者是各个用户独有的全局变量。
可能有人会问既然所有用户都可以使用application变量那他可以用在什么场合呢这里举个例子 网站访问数。多个请求访问时都可以对它进行操作。
优点 1.使用简单消耗较少的服务器资源。
2.不仅能传递简单数据还能传递对象。
3.数据量大小是不限制的。
缺点 1.作为全局变量容易被误操作。所以单个用户使用的变量一般不能用application。
使用方法
1.在源页面的代码中创建你需要传递的名称和值构造Applic ation变量:
App lication["Nmae"]="Value(Or Object)";
2.在目的页面的代码使用Application变量取出传递的值。
Result=App lic ation["Nmae"]
注意常用loc k和unlock方法用来锁定和解锁为了防止并发修改。
例子 (1)a.aspx //发送页面private void Button1_Click(object sender,System.EventArgs e)
{
App lic ation["name"]=Label1.Text;
}
(2)b.aspx //接收页面private void Page_Load(object sender,EventArgs e)
{string name;
App lic ation.UnLock();
}
五、 Server.Transfer
这个才可以说是面象对象开发所使用的方法其使用Server.Transfer方法把流程从当前页面引导到另一个页面中新的页面使用前一个页面的应答流所以这个方法是完全面象对象的简洁有效。
S erver.Transfer是从当前的ASPX页面转到新的ASPX页面服务器端执行新页并输出,在新页面中通过Context.Handler来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成所以客户端浏览器中的URL地址是不会改变的。调用Server.Transfer时当前的ASPX页面终止执行执行流程转入另一个ASPX页面但新的ASPX页面仍使用前一ASPX页面创建的应答流。ps 比较S erver.Transfer和Respons e.Redirect的区别。
(1)Server.Transfer在服务器端完成所以客户端浏览器中的URL地址是不会改变的 Respons e.Redirect是客户端完成 向服务器端提出新的页面处理请求所以客户端浏览器中的URL地址是会改变的。
(2)Server.Transfer在服务器端完成,不需要客户端提出请求减少了客户端对服务器端提出请求。
(3)S erver.Trans fer只能够转跳到本地虚拟目录指定的页面,也就是工程项目中的页面而Respons e.Redirect则十分灵活,可以跳转到任何URL地址。
(4)S erver.Trans fer可以将前一个页面的各种类型的值传到新的页面Response.Redirect则只能借助URL中带参数或是结合上面四种办法把各种类型的值传到新的页面。
优点 1.直接在服务器端重定向使用简单方便减少了客户端对服务器端提出请求。
2.可以传递各种数据类型的值和控件的值。
缺点 1.客户端浏览器中的URL地址是不改变会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不在同一个虚拟目录或其子目录下那么使用相对路径的图片、超链接都会导致错误的指向。
//发送页面public partial class transfer_write : System.Web.UI.Page
{public string param1
protected void Button1_Click(object sender, EventArgs e)
{
Server.Transfer("transfer_read.aspx", true) ;
}
}
//接收页面方法1 利用类的静态属性 transfer_write newWeb; //实例前一个页面窗体 newWeb = (transfer_write)Context.Handler;
TextBox1.Text = newWeb.param1 ;
TextBox2.Text = newWeb.param2;
//方法2 类似于表单的post方式不用设置静态属性 推荐这种方式,安全简单
TextBox1.Text = Request.Form["TextBox1"] .ToString() ;
六、表单提交
表单form的提交有两种方式一种是get的方法一种是post的方法.看下面代码,理解两种提交的区别:
Get方式
1、 写值页面
<form id="form1" method="get" action="from_read.aspx">
<input id="Text1" name="name" type="text" />
<input id="Text2" name="age" type="text" />
<input id="Checkbox1" name="checkbox" type="checkbox" value="1" />1
<input id="Radio1" name="radio" type="radio" value="2" />2
<input id="Submit1" type="submit" value="get_submit" />
</form>
2、 读值页面
//get方式if (Request["name"] != null)
{
TextBox1.Text = Request["name"] .ToString() ;
}if (Request["age"] != null)
{
TextBox2.Text = Request["age"] .ToString() ;
}
Post方式
1、写值
<form id="form2" method="post" action="from_read.aspx">
<input id="Text3" name="name" type="text" />
<input id="Text4" name="age" type="text" />
<input id="Checkbox2" name="checkbox" type="checkbox" value="1" />1
<input id="Radio2" name="radio" type="radio" value="2" />2
<input id="Submit2" type="submit" value="post_submit" />
</form>
3、读值
//post方式if (Request.Form["name"] != null) {
TextBox1.Text = Request.Form["name"] .ToString() ;
}if (Request.Form["age"] != null)
{
TextBox2.Text = Request.Form["age"] .ToString() ;
}
表单提交中get和p os t方式的区别归纳如下几点
1. get是从服务器上获取数据 post是向服务器传送数据。
2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中值和表单内各个字段一一对应在URL中可以看到。 post是通过HTTP post机制将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3.对于get方式服务器端用Reques t.QueryString获取变量的值对于po st方式服务器端用Request.Form获取提交的数据。
4.get传送的数据量较小不能大于2KB。 post传送的数据量较大一般被默认为不受限制。但理论上 IIS4中最大量为80KB IIS5中为100KB。
5.g et安全性非常低 p os t安全性较高。但是执行效率却比P os t方法好。
建议
1、 g et方式的安全性较P os t方式要差些包含机密信息的话建议用P o st数据提交方式
2、在做数据查询时建议用Get方式而在做数据添加、修改或删除时建议用Post方式
利用form的隐藏域
隐藏域不会显示在用户的浏览器中 一般是在页面中加入一个隐藏控件 与服务器进行交互时把值赋给隐藏控件并提交给下一页面。隐藏域可以是任何存储在网页中的与网页有关的信息的存储库。使用隐藏域存入数值时用 hidden控件.value=数值取出接收数值时用变量=hidden控件.value。使用隐藏域的优点是实现简单 隐藏域是标准的HTML控件不需要复杂的编程逻辑。隐藏域在页上存储和读取不需要任何服务器资源几乎所有浏览器和客户端设备都支持具有隐藏域的窗体。缺点是存储结构少仅仅支持简单的数据结
构存储量少因为它被存储在页面本身所以无法存储较大的值而且大的数据量会受到防火墙和代理的阻止。
例
写值
<form id="form2" method="post" action="from_read.aspx">
<input id="Hidden1" name="hide" type="hidden" value="2"/>
</form>
读值if (Request.Form["hide"] != null)
{
TextBox2.Text = Request.Form["hide"] .ToString() ;
}
七、 viewst ate
ViewState不是跨页面的.session是会话级的.application是应用程序级的.而viewstate则是页面级的.也就是说出了这个页面.该viewstate不能再被访问.可以保存任何对象.如:page_load中: if( !IsPostBack)ViewState["test"]=0;
在页面的某个button事件中: inttest=Convert.ToInt32(ViewState["test"] .ToString() ) ;
这时可以直接从viewstate中拿出值来.
八、 PostBackUrl()方法类似于form的post方式和server.transfer方式default.aspx页面
Code
1 、发送页面
<asp:Butto n ID="Butto n1"Runat="server"Text="PostToAnotherPage"PostBackUrl="~/Default2.aspx" />
2、接收页面default2.aspx页面
Codeif(PreviousPage!=n u l l)
{ TextBox textBox1 =
(TextBox)P revi o usPage.Fi ndControl("TextBox1");
Respo nse.wri te(te xtBo x1 .Te xt ); }
BuyVM测评,BuyVM怎么样?BuyVM好不好?BuyVM,2010年成立的国外老牌稳定商家,Frantech Solutions旗下,主要提供基于KVM的VPS服务器,数据中心有拉斯维加斯、纽约、卢森堡,付费可选强大的DDOS防护(月付3美金),特色是1Gbps不限流量,稳定商家,而且卢森堡不限版权。1G或以上内存可以安装Windows 2012 64bit,无需任何费用,所有型号包括免费的...
? ? ? ?创梦网络怎么样,创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以****,属于一手资源,高防机柜、大带宽、高防IP业务,另外创梦网络近期还会上线四川联通大带宽,四川联通高防IP,一手整CIP段,四川电信,联通高防机柜,CN2专线相关业务。成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快...
小欢互联成立于2019年10月,主打海外高性价比云服务器、CDN和虚拟主机服务。近期上线了自营美国CERA机房高速VPS,进行促销活动,为客户奉上美国/香港八折优惠码:Xxc1mtLB优惠码适用于美国CERA一区/二区以及香港一区/二区优惠时间:即日起至10月底优惠码可无限次使用,且续费同价!官网:https://idc.xh-ws.com购买地址:美国CERA一区:https://idc.xh-...