Post和Get的区别(兼谈页面间传值的方式)

news/2024/7/4 22:33:56 标签: string, server, session, url, input, button

从一个页面转向另一个页面的请求方式有两种,Post和Get.

如果从原理上来探究他们的区别,涉及到Http传输协议的细节,这样深究下去,就成华为人干的事了,有空可以请教一下华为高人,我一个做企业软件的实在没那么多时间也没必要去研究那些东西,所以就看一下表象吧。

所有的人都知道如下区别:
1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。
2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节.
3.Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。

我们的form表单的method方法,有两个,post,get.它在页面传值的时候的区别也就是上面提到的三点.

先来看一下post方法.

这个方法在asp时代应该跟程序员打交道很多的,因为那时候没有现在的ViewState,每个页面要恢复原来的状态,都要将页面Post给自身, 然后挨个取值,重新赋值.现在这些琐碎的事情都让ViewState代劳了.所以将页面post给自身的动作,在某种程度上已经被Asp.net的程序员 们忘却了,所以Post也就被大部分的忽视了,这就是技术进步的双刃剑,带来方便的同时,蒙上你的眼睛。

ViewState必须包含在<form runat="server">的窗体下,而只要包含了"runat="server""的标志,就甭想Post到其他页面中去,为什么?老盖说, 我的ViewState是保存当前页面状态的,你要转到其他页面,他说,不行,**不认识的参数.如果想Post一个窗体,咋办?有四种方式可供选择.

1.在页面上新建一个form,不要加上runat="server"的标志,当然在这个窗体下的控件也就不用想用Viewstate来传值了.当在其他有runat="server"的窗体的中的按钮事件中,手动调用新建form的submit() 函数.

传送页面代码如下:


<!--html代码-->
<form id="Form1" method="post" runat="server">
            <input id="btnTransfer" type="button"  οnclick="post();" runat="server">
            <input type="text" runat="server" id="SourceData">
        </form>
        <form id="forPost" method="post">
            <input type="text" runat="server" id="SourceData2">
        </form>

<!--Script代码-->
<script language="javascript">
            function post()
            {
                forPost.action="DestinationPage.aspx";
                forPost.submit();
            }
        </script>

 

 

接收页面


string a=Request.Form["SourceData2"].ToString();

 

2.通过Session取值,在一个页面中赋值,在其他页面中共享,这个方式也被广泛应用,个人不倾向于用这种方式,我怕造成Session值的混乱无序,Session用来存一些公共的东西已经累得够呛了。

3.通过Context传值,在传送页面之前,将需要传递到其他页面的值存在Context中。示例代码如下:

传送页面


//点击某个button时触发
private void btnTransfer_ServerClick(object sender, EventArgs e)
         {
            Context.Items["SourceData"]=SourceData.Value;
            Server.Transfer("DestinationPage.aspx");
        }

 

接收页面


string a=Context.Items["SourceData"].ToString();

 

4.通过Server.Transfer的方式。
这个方式在方法三种已经用到了,不过可以在调用页面为要传递到被调用页面的值创建属性(当然可以直接将它设成public),这样就可以在其他页面访问了。

传送页面


//要传送的值
private 
System.Web.UI.HtmlControls.HtmlInputText SourceData;

public string getSourceData
{
  get
   {
    return SourceData.Value;
  }
}

//传送页面
Server.Transfer("DestinationPage.aspx");

 

接收页面


private SourceClass sourcePage;

sourcePage=(SourceClass)Context.Handler;
            string aa=sourcePage.getSourceData;

 

以上就是Post的在不同页面传递数据的方式了。
下面是get方法
我常用的是  传送页面


string aa=SourceData.Value;
            string bb=SourceData.Value;

            string url="DestinationPage.aspx?parameter1="+aa+"&parameter2="+bb;
            Response.Redirect(url,false);

 

接收页面


string aa=Request.QueryString["parameter1"].ToString();
            string bb=Request.QueryString["parameter2"].ToString();

 

 


至于 Response.Redirect(url,false)里的false都是Response.End()这个方法惹的祸,老盖说,写成false就好了,因为默认是true。我都转向其他页面了,还不让我终止原来页面的响应

 

http://www.niftyadmin.cn/n/1412867.html

相关文章

基于Idea从零搭建一个最简单的vue项目

一、需要了解的基本知识 node.js Node.js是一个Javascript运行环境(runtime)&#xff0c;发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化&#xff0c;提供替代的API&#xff0c;使得V8在非浏览器环境…

程序员如何写简历(附模板)

背景 对于一个程序员来说&#xff0c;简历很重要。我身边就有这么一个例子。 朋友A和朋友B&#xff0c;都投了一家公司的岗位。 友A简历被拒&#xff0c;用人的项目组认为简历与岗位不匹配。 友B简历经过我修改之后&#xff0c;不但简历过了&#xff0c;还顺利的通过了一二三四…

SSM(四)WebService入门详解

2019独角兽企业重金招聘Python工程师标准>>> 前言 webservice这个不知道大家首次接触的时候是怎么理解的&#xff0c;反正我记得我当时第一次接触这个东西的时候以为又是一个XX框架&#xff0c;觉得还挺高大上。然而这一切在之后我使用过后才发现这些全都是YY。 那…

linux环境下搭建环境

一.安装JDK 1.首先去官网下载linux版本的JDK 2.将下载好的jdk的压缩包放到linux的opt文件夹下 3.解压缩  tar -xzvf jdk-8u211-linux-x64.tar.gz 4.然后再该目录下输入ls查看文件夹就能看见我们熟悉的jdk1.8.0_211文件了 5.修改etc文件夹下面的profile文件&#xff0c;类似于…

让 Angular 1.x 跟上时代的步伐

本篇技术博客来自有着化腐朽为神奇能力的&#xff0c;Worktile 技术牛人Web 总监 徐海峰 大神的分享~满满的干货&#xff0c;你值得拥有&#xff01;Worktile 的前端构建之路 2013年&#xff0c;那时候 Angular.js 才刚刚兴起&#xff0c;我们大胆了选择了当时看来比较新的技术…

BezierCode 工具使用

概要 今天无意间看到一个视频&#xff0c;发现了一款绘画Bezier 图形绘制并自动生成OC代码的神器&#xff0c; 因此马上先记录下。 之前一直很纠结如果程序员自己去绘制图片&#xff0c;久那么使用bezier 自己去画吗&#xff1f; 答案是&#xff1a;其实这样很不现实的。 点…

elasticsearch7.7安装部署

这里只搭建了一个节点&#xff0c;提供给测试环境使用&#xff0c;暂未考虑ES集群扩容和优化。 ES 7.0 是 2019 年 4 月份发布的&#xff0c;底层是 Lucene 8.0。其他重要特性有&#xff1a; 废除单个索引下多 Type 的支持 ES Security 免费使用 ECK - ES Operator on K8s 新功…

整合梅花雨日历控件,推出.NET版本

转 http://www.cnblogs.com/PiedPiper/archive/2007/01/10/617004.html 喜欢梅花雨的日历控件&#xff0c;利用周末时间整合了该控件。主要功能如下&#xff1a;1.将该控件整合为.NET版本&#xff0c;做成服务器控件&#xff1b; 2.可以设计时显示输入文本框&#xff0c;并可以…