2014-03-13 80 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