2009-06-02 33 views
4

我有一個詳細頁面,從各個地方被調用,並有一個很好的可讀網址,如如何製作「返回」鏈接?

「www.mypage.com/product/best-product-ever」。

的調用頁面(產品清單)有這樣一個比較複雜的網址:

「www.mypage.com/offers/category/electronic/page/1/filter/manufacturer/sony/sort/price」和

「www.mypage.com/bestseller/this-week」。

如何製作從詳細信息頁到通話產品列表的反向鏈接?

  • 我不能使用JavaScript
  • 我不想在URL中的調用頁面,因爲它得到長期
  • 我真想頁面之間的鏈接,沒有HTTP-POST
  • 我不能使用的sessionState

編輯: 的sessionState被排除,因爲如果有2個打開窗戶,那麼他們將共享相同的「返回」頁面信息。

回答

4

就像李先生說,使用引薦值:

<a href="<%= Html.Encode(Request.UrlReferrer.ToString()) %>">Back</a> 

如果你不希望在鏈接的URL,因爲它太長時間,嘗試運行某種在URL簡單的壓縮算法,顯示壓縮後的數據爲Unicode文本,然後追加壓縮URL作爲參數傳遞給重定向頁面,例如:

<a href="Redirect.aspx?u=compressed_url_goes_here">Back</a> 
0

你有cookie嗎?

如果是這樣,你可以把它放在那裏,或者用它來創建你自己的會話狀態。

0

我覺得這更像是一個「返回結果」,那麼一個通用的「< <回來」的鏈接,因爲你所期望的通用反向鏈接返回到遺傳列表,而不是重過濾你描述的列表中,右鍵?

我不知道這是否屬於你的「無後」的條件,但我看到的卻是具有Detail行動後只([AcceptVerbs(HttpVerbs.Post)])和包括像string fullRoute另一個參數,它被轉換成唯一選擇'返回結果'的詳細信息頁面上的'鏈接'。過載Detail操作缺少fullRoute參數,並且重載操作是一個GET操作,因此POST fullRoute值不是必需的(當用戶確定「通用」「後退」鏈接時)。這應該爲「詳細信息」頁面和POST請求提供「通用」GET請求,該請求將包含篩選列表的特定「返回結果」鏈接。

+0

詳細行動不能在我的情況是一個職位。用戶必須從任何詳細頁面返回到過濾 - 排序 - 分頁列表。 就像瀏覽器後退按鈕。 – 2009-06-02 08:46:10

+0

你介意我問你爲什麼不能使用POST? – 2009-06-02 10:53:18

2

如何使用引用標頭值?

+1

推薦人可能沒有設置 - 一些公司/防火牆將其從請求中刪除 – veggerby 2009-06-02 10:02:10

1

這裏有一個瘋狂的想法,這將需要一個公平的工作,但是,也有可能對性能健康(視你的用戶)..但在這裏我們去:

創建一個緩存'ListResults'的存儲庫(並將它連接到你喜歡的數據庫,或者將它留在服務器的內存中)。 總之,這個回購可以做的是存儲一個ListResult,其中將包括所有東西,以堅持任何給定用戶正在查看的列表的當前視圖的狀態。這可能包括路由和其他值......但基本上是重定向到篩選和排序列表的特定頁面所需的所有內容。

隨着ListResult項目被添加到回購中,會生成一個小的唯一散列/關鍵字,這將對網址友好 - 類似於「k29shjk4」 - 它會與日期時間戳一起添加到項目中。

ListResult s只是從列表中的默認視圖(即不進行過濾,排序和第1頁)時開始持續存在 - 這對性能有很大幫助。

A ListResult項目可能永遠不會實際使用,但特定列表視圖上的所有詳細操作鏈接都將ListResult.Key散列值添加到路由中。所以是的,它可能會以查詢字符串結尾,但它會很短(友好的網址),如果您想更多地混淆路線,您可以進一步整理它。

對於導航「返回」列表,您可能需要一個新的小控制器,該控制器只接受ListResult.Key散列值,並從查找中重定向/重新創建列表視圖的狀態(包括分頁,過濾和排序)在回購。所以我們已經滿足了目前爲止的要求:沒有調用網頁中的url(在它的意思上,它不是整個頁面 - 只是它的哈希查找);沒有發佈,沒有會議,沒有js。

要前往大停止ListResult回購(和危險的:如果你把它堅持到DB),您可以使用ASP.NET background service通過時間戳的方式定期修剪「老」路線..和「擴展」當通過新控制器請求時,通過將時間加到ListResult項目的印章上來持續使用路線的壽命。如果用戶想要永久鏈接到列表視圖,則無需永久保存路由,他們可以爲長列表路由本身添加書籤。

希望這有助於某種方式