2010-01-20 66 views
2

我有一個頁面需要用戶經歷幾個步驟,但是在顯示不同面板的同一ASPX頁面上執行一個步驟。ASP.NET Postback和URL

然而,這是每個步驟具有不同的URL的要求,這可能是一個簡單的查詢字符串參數,例如:

步驟1: /member/signup.aspx?step=1

第2步: /member/signup.aspx?step=2

第3步: /member/signup.aspx?step=3

但是我不希望有重定向使用者每次他們繼續進行下一步時,都需要使用URL,這將涉及到大量的重定向以及頁面加載中的switch語句,以確定用戶所處的步驟。

如果我可以在原始請求被髮回給用戶時更改顯示給用戶的URL,比如用戶在步驟1中點擊「下一步」,那麼頁面會進行一些處理然後改變響應,以便用戶可以看到步驟2的URL但沒有任何重定向。

任何想法將不勝感激。

+0

即使它們在進程中或僅用於返回目的,url是否有必要顯示不同? – 2010-01-20 12:54:01

回答

0

這將是一個更復雜一點可能比你想要的,但你可以實現與提交按鈕的PostBackUrl屬性這種效果。我假設每個面板都有自己的「提交」按鈕,他們都可以使用此屬性來「推進」該過程。缺點是爲了獲得提交的控件,你需要使用Page.PreviousPage屬性來訪問任何控件及其值。

-1

退房Server.Transfer的

+0

Server.Transfer與他想要的Response.Redirect沒有區別。 – 2010-01-20 12:55:16

0

您可以根據查詢字符串值以編程方式更改每個Page_Load上「Next」按鈕的PostbackUrl屬性。這有點奇怪,因爲您無法使用標準事件處理程序來進行按鈕點擊,並且您必須使用頁面的PreviousPage屬性才能從前一選項卡中獲取數據。

我會說挑戰這個要求。爲什麼有人需要跳進中間步驟?如果是向用戶顯示進度的情況,請在頁面上執行此操作,而不是在URL中執行此操作。

0

您需要每個步驟都有不同的URL,而Response.Redirect是唯一的選擇。由於您希望避免重定向,因此您可以使用IFrame,但IFrame URL在用戶瀏覽器中不可見。我認爲重定向選項是醜陋的(對於SERVER和CLIENT),因爲在這種情況下,您首先在頁面上發佈並獲取該頁面。最好的解決方法是POST BACK帶有一些可變的跟蹤步驟。

0

你可以實現一個形式或URL重寫,這樣你的網址,最終被

/成員/註冊/步驟1/

/成員/註冊/第二步/

/成員/註冊/步驟3/

爲此使用

HttpContext.RewritePath方法,這意味着你可以重寫/成員/註冊/步驟1 /到/member/signup.aspx?step= 1例如。看一個例子here

我還會使用PRG(發佈請求獲取)模式,以便每個下一個鏈接都將該步驟的表單數據發佈到會話,然後將用戶重定向到正確的下一個url。這將確保用戶可以安全地來回導航,並且網址在您的所有帖子中都會保持不變。