post,get用法 asp

來源:互聯網
上載者:User

從一個頁面轉向另一個頁面的請求方式有兩種,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" onclick="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+"¶meter2="+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://hi.baidu.com/boomyear/blog/item/2f82c8100a60fbf1c3ce79ed.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.