[英]Post Redirect Get Hide URL Parameters
让我首先尝试在此处设置方案。 这是使用ASP.NET 4.0,MVC3和C#完成的。
我有一个图片库。 我在图片库中有相册的经理。 每个画廊都有一组页面。
当我使用相册管理器时,视图将显示当前相册的列表。
在相册列表中,可以选择编辑,删除或管理该相册中的页面。
选择管理相册的页面时,会有一个页面列表,每个页面都有编辑,删除和查看。
当选择页面的编辑按钮,然后进行编辑然后保存时,遇到了我的问题。
从相册列表中转到要管理的页面列表的按钮可通过帖子发送ID,以隐藏相册ID和其他参数。
因此,页面视图是通过[HttpPost]控制器生成的。 然后,从管理页面的视图中,单击编辑按钮时,出于相同的原因(隐藏参数),从[HttpPost]控制器生成用于编辑的页面。
这是问题所在:在编辑视图中单击“保存”按钮后,数据会通过[HttpPost]发布到保存更改控制器,但我不想返回编辑视图(刷新会重新发布更改,这并不是最好的方法)实践)。 我想返回到所选专辑的页面列表。 为此,我使用来自编辑控制器的[HttpPost]重定向回[HttpGet]控制器,以查看列出所选专辑页面的视图。 当我这样做时,呼叫看起来像这样:
return RedirectToAction("ManagePages", new { albumId = model.AlbumId });
不幸的是,这使该URL具有显示的相册ID: http:// XXX / ManagePages?AlbumId = 56 。
如何在不显示参数列表中显示专辑ID的情况下,返回到同一选定专辑的ManagePages视图?
您可以在执行重定向之前使用以下方法将专辑ID存储在TempData中:
TempData["AlbumId"] = model.AlbumId;
return RedirectToAction("ManagePages");
然后,在ManagePages GET操作中,您可以读取id的内容:
int albumId = (int)TempData["AlbumId"];
注意:读取ID后,将清除TempData [“ AlbumId”]的内容。
更新:
实际上,如果您使用TempData并且用户单击刷新,则刷新时数据将丢失。 因此,您可以改用Session:
Session["AlbumId"] = model.AlbumId;
...
int albumId = (int)Session["AlbumId"];
在执行RedirectToAction之前,您可以设置带有专辑ID的Cookie。 然后,在ManagePages操作中阅读它。
但是,值得一提的是,如果您对内部标识在外部是敏感的,则您的应用程序仍会通过HTML源公开它们。 除非您具有某种身份验证机制,否则其他用户可以使用它们查看他们不应该使用的数据。
您可以将ID隐藏在TempData变量中。 TempData通过一次重定向保持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.