2014-03-13 112 views
1

我需要使用其他操作方法中的模型對象重定向到操作。沒關係,但是當我這樣做時,我可以看到URL地址欄中的所有參數。既然是付款,那對我來說就不好了?Asp.net MVC RedirectToAction在URL中顯示參數

我可以做到這一點基本通過ID,但我的模型是viewmodel,沒有密鑰。

我該如何防止這種情況。

+0

檢查你的模型這個http://stackoverflow.com/questions/11209191/how-do-i-include-a-model- with-a-redirecttoaction/11209320#11209320 – Shyju

回答

2

在這種情況下,你真正應該做的是返回一個視圖而不是redirect

像:

return View(viewModel); 

但如果你真的喜歡做一個重定向,你可以放置在TempData的視圖模型,然後重定向到行動:

TempData["MyViewModelFromRedirect"] = viewModel; 

而在你的重定向動作:

var ViewModel = (MyViewModel)TempData["MyViewModelFromRedirect"]; 
+0

使用TempData是否安全?如果發生了什麼?同時兩個用戶單擊帖子上的提交按鈕?任何問題 ?感謝您的回答 – umki

+0

對於每個用戶,存儲在會話中的多個用戶不會有任何問題。 TempData基本上是一個會話存儲。唯一的區別是會話在一定時間後過期,而TempData一旦重定向操作完成即失效,除非您使用TempData.Keep()方法爲一個更多的請求特別保留它。 – Ganesh

+0

非常感謝。 – umki

1

重定向結果會將HTTP重定向結果(302)返回給瀏覽器,與整個參數在URL中。如果您在路由值中傳遞模型屬性,它們將被序列化爲字符串。

因此,正如您所說瀏覽器(在客戶端)將會看到所有這些參數,並且瀏覽器將向新的url發出另一個GET請求。

在這種情況下推薦的方法是在控制器上使用TempData來設置所有服務器端數據。然後重定向到新的動作。

TempData["mymodel"] = myModel; 
return Redirect(Url.Action("newaction", "newcontroller")); 

,並在新的行動,你可以檢索的TempData

+0

302迴應,而不是300 – Shyju

+0

感謝您的回答,請參閱我對其他帖子的評論 – umki