我需要使用另一个操作方法中的模型对象重定向到Action。没关系,但是当我这样做时,我可以看到URL地址栏中的所有参数。既然是付款,对我来说不合适吗?
我可以基本上传递ID,但我的模型是viewmodel,没有Key。
我该如何防止这种情况发生。
答案 0 :(得分:2)
在这种情况下,您真正应该做的是返回视图而不是redirect
。
像:
return View(viewModel);
但是如果您真的更喜欢进行重定向,可以将ViewModel放在TempData中,然后重定向到该操作:
TempData["MyViewModelFromRedirect"] = viewModel;
在重定向的操作中:
var ViewModel = (MyViewModel)TempData["MyViewModelFromRedirect"];
答案 1 :(得分:1)
重定向结果将HTTP重定向结果(302)返回给浏览器,其中包含url中的所有参数。如果您在路由值中传递模型属性,它们将被序列化为字符串。
因此,正如您所说,浏览器(在客户端)将看到所有这些参数,浏览器将向新网址发出另一个GET请求。
在这种情况下推荐的方法是在控制器上使用TempData来设置所有服务器端数据。然后重定向到新操作。
TempData["mymodel"] = myModel;
return Redirect(Url.Action("newaction", "newcontroller"));
在新的Action中,您可以从TempData
中检索模型