資源描述:
《Post和Get的區(qū)別(兼談頁面間傳值的方式)》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、Post和Get的區(qū)別(兼談頁面間傳值的方式)從一個頁面轉向另一個頁面的請求方式有兩種,Post和Get.如果從原理上來探究他們的區(qū)別,涉及到Http傳輸協(xié)議的細節(jié),本文不加探究,只討論一下表象。所有的人都知道如下區(qū)別:1.Post傳輸數(shù)據(jù)時,不需要在URL中顯示出來,而Get方法要在URL中顯示。2.Post傳輸?shù)臄?shù)據(jù)量大,可以達到2M,而Get方法由于受到URL長度的限制,只能傳遞大約1024字節(jié).3.Post顧名思義,就是為了將數(shù)據(jù)傳送到服務器段,Get就是為了從服務器段取得數(shù)據(jù).而Get之所以也能傳
2、送數(shù)據(jù),只是用來設計告訴服務器,你到底需要什么樣的數(shù)據(jù).Post的信息作為http請求的內容,而Get是在Http頭部傳輸?shù)?。我們的form表單的method方法,有兩個,post,get.它在頁面?zhèn)髦档臅r候的區(qū)別也就是上面提到的三點.先來看一下post方法.這個方法在asp時代應該跟程序員打交道很多的,因為那時候沒有現(xiàn)在的ViewState,每個頁面要恢復原來的狀態(tài),都要將頁面Post給自身,然后挨個取值,重新賦值.現(xiàn)在這些瑣碎的事情都讓ViewState代勞了.所以將頁面post給自身的動作,在某種程度
3、上已經(jīng)被Asp.net的程序員們忘卻了,所以Post也就被大部分的忽視了,這就是技術進步的雙刃劍,帶來方便的同時,蒙上你的眼睛。ViewState必須包含在的窗體下,而只要包含了"runat="server""的標志,就甭想Post到其他頁面中去,為什么?老蓋說,我的ViewState是保存當前頁面狀態(tài)的,你要轉到其他頁面,他說,不行,**不認識的參數(shù).如果想Post一個窗體,咋辦?有四種方式可供選擇.1.在頁面上新建一個form,不要加上runat="server"
4、的標志,當然在這個窗體下的控件也就不用想用Viewstate來傳值了.當在其他有runat="server"的窗體的中的按鈕事件中,手動調用新建form的submit()函數(shù).傳送頁面代碼如下:
????????
接收頁面string?a=Request.Form["SourceData2"].ToString();2.通過Session取值,在一個頁面中賦值,在其他頁面中共享,這個方式也被廣泛應用,個人不傾向于用這種方式,我怕造成Session值的混亂無序,Sessi
7、on用來存一些公共的東西已經(jīng)累得夠嗆了。3.通過Context傳值,在傳送頁面之前,將需要傳遞到其他頁面的值存在Context中。示例代碼如下:傳送頁面//點擊某個button時觸發(fā)private?void?btnTransfer_ServerClick(object?sender,?EventArgs?e)????????{????????????Context.Items["SourceData"]=SourceData.Value;????????????Server.Transfer("Destin
8、ationPage.aspx");????????}接收頁面string?a=Context.Items["SourceData"].ToString();4.通過Server.Transfer的方式。這個方式在方法三種已經(jīng)用到了,不過可以在調用頁面為要傳遞到被調用頁面的值創(chuàng)建屬性(當然可以直接將它設成public),這樣就可以在其他頁面訪問了。傳送頁面//要傳送的值private?System.Web.UI.H