讓我試着首先在這裏設置場景。這是使用ASP.NET 4.0,MVC3和C#完成的。發佈重定向獲取隱藏URL參數
我有一個圖片庫。我有一個圖片庫中相冊的經理。每個畫廊都有一組頁面。
當我使用相冊管理器時,該視圖顯示當前相冊的列表。
在相冊列表中,可以選擇編輯,刪除或管理該相冊中的頁面。
選擇管理相冊的頁面時,會出現一個頁面列表,每個頁面都有編輯,刪除和查看。
當頁面的編輯按鈕被選中,編輯完成並保存後,遇到我的問題。
用於從相冊列表中獲取要管理的頁面列表的按鈕將通過發送ID來隱藏albumid和其他參數。
因此,頁面視圖是從[HttpPost]控制器生成的。然後,從視圖管理頁面,單擊編輯按鈕時,出於同樣的原因(隱藏參數),從[HttpPost]控制器生成編輯頁面。
這是問題:一旦在編輯視圖中單擊保存按鈕,數據將通過[HttpPost]發佈到保存更改控制器,但我不想返回編輯視圖(刷新會重新發布更改和它並不是最佳實踐)。我想返回到所選專輯的頁面列表。在此過程中,我使用編輯控制器中的[HttpPost]重定向到[HttpGet]控制器,以查看列出所選專輯頁面的視圖。當我這樣做,調用看起來是這樣的:
return RedirectToAction("ManagePages", new { albumId = model.AlbumId });
這不幸使URL具有所示的相冊ID:http://XXX/ManagePages?AlbumId=56。
如何返回到同一所選專輯的ManagePages視圖,而不顯示參數列表中的專輯ID?
此外,如果用戶刷新剛剛收到這個TempData的頁面上,將在頁面失敗,因爲它期待有哪個不是在渲染之後發送的數據? –
我已更新我的答案以使用會話。 TempData實際上可能是最適合傳遞錯誤消息的地方,在刷新時丟失它們並不重要。不過,我自己會考慮將ID作爲RedirectToAction()的一部分傳遞給URL。只要您知道(並執行任何所需的服務器端檢查),因爲黑客可能會將其更改爲不同的ID(有效或無效),所以將ID暴露給用戶並不壞。 – Dangerous
a)是否正在更改所有惡意用戶可以做的ID? b)在httpget上,我可以重新分配tempdata並保留它,直到它需要再次讀取或被認爲是不好的做法 –