2009-05-28 57 views
4

所以我理解了prg模式的基礎知識。但我還沒有遇到一種技術,可以讓任意數據可用於頁面的「get」實例。如何在asp.net WebForms中實現Post/Redirect/Get模式?

例如,我可能希望向用戶顯示不同的反饋消息,具體取決於他們發起PostBack的操作。

我一直在做的是發送一個標識符作爲查詢字符串參數。這工作正常,但它引入書籤問題,似乎不會很好地擴展。如果我需要發送所有ViewState,該怎麼辦?

不幸的是,目前我與WebForms綁定在一起,無法說服我的組織遷移到mvc。

回答

3

如果張貼的田地,在堅持在重定向之前,您需要在重定向之後訪問該數據,我會在您提到的查詢字符串後追加數據記錄的標識符。您也可以指定請求的狀態(用於顯示消息等)。然後在GET頁面上,您可以讀出數據並執行任何操作。

我沒有看到任何其他方式來解決這個問題,通過GET獲得的每一頁都將無法訪問到前一頁的ViewState

使用Server.Transfer將作爲處理POST上相同的效果原始頁面。

您可以使用會話變量來存儲POST數據,但這很糟糕。

+0

是的,我意識到信息將需要堅持。我正在尋找實現該目標的最佳方式。據我瞭解,Server.Transfer繞過了prg的「重定向」部分。 – 2009-05-28 18:02:08

0

我認爲你仍然可以在表單元素中使用get方法。 在這種情況下,您將無法以正常方式使用控件的ID。但是你可以使用Request.Params集合來獲取視圖狀態。

更新:對不起,我只是再試一次。並發現您可以通過代碼隱藏的ID訪問您的服務器控件。像:

Response.Write(text1.Text) 

見例如:

aspx頁面(僅form元素):

< form id="form1" runat="server" method="get"> 
< div> 
< asp:TextBox ID="text1" runat="server" /> 
< asp:Button ID="button1" runat="server" OnClick="buttonClick" /> 
< div> 
< form> 

注: 我之前每個 「<」 所使用的空間,否則上面的代碼將不可見。

頁面後面的代碼(僅按鈕單擊事件):

protected void buttonClick(object sender, EventArgs e) 
    { 
     string text = Request.Params["text1"]; 

     Response.Write(text); 
    } 

當你點擊按鈕的URL看起來像這樣:

http://localhost:1157/WebSite1/Default.aspx?__VIEWSTATE=%2FwEPDwUKMTkwNjc4NTIwMWRkoJEtEHZ8lHQ53QllSkz8ncpEw80%3D&__EVENTVALIDATION=%2FwEWAwKf%2BPPUCwKTjKGwCgKs34rGBvus9oxN%2FQkHlkzpKUEwrbxHLM6u&text1=ashish&button1=

+0

查詢字符串的大小有約2kb的限制。視圖狀態幾乎總是比這更大。 – GlennG 2017-03-22 11:11:11