7in10笔记:.NET页面间传递数据的方法
1、POST方法
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
6、Get是Form的默认方法。
通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。如果:
1、 登陆页面可以被浏览器缓存;
2、 其他人可以访问客户的这台机器。
那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。
建议
在Form中,建议使用post方法。
发送页面的部分代码:
<form id="FormPost_1" action="rec1FormPost_2.aspx" method="post">
Name : <INPUT name="text1" type="text" value="7in10"> <INPUT type="submit" value="提交">
</form>
注意:action属性指明用reclFormPost_2.aspx为接收页面。
接收页面的部分代码:
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write("Hello "+Request.Form["text1"]); //自动读取了提交表单中text1的值
}
如果用GET的方式提交,那么在URL中会变成接收处理页面其后面还跟着?text1=7in10
这样的话也可以利用使用Request["text1"]来读取数据
2、Poster对象方法
发送页面的部分代码:FormSubmit.aspx
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("FormPost.aspx");
}
接收页面的部分代码:FormPost.aspx
private void Page_Load(object sender, System.EventArgs e)
{
//获取post过来的页面对象
if (Context.Handler is FormSubmit)
{
//取得页面对象
FormPost poster=(FormPost)Context.Handler;
//取得控件
Response.Write("Hello " + ((TextBox)poster.FindControl("TextBox1")).Text + "<p>");
Response.Write("Hello " + poster.TextBox2.Text );
}
}