【发布时间】:2009-08-16 16:32:40
【问题描述】:
通过 post 提交表单,然后重定向到相同或不同 URL 的 ASP.NET MVC 模式非常容易编码。
想象一下这个场景:
- 用户转到 /products/42/edit 以查看和编辑产品 42。
- 他们在该页面上看到一些疯狂的东西,对其进行编辑,然后点击保存。这会导致发布到 /products/42/edit
- 该操作更新数据并重定向到或返回 /products/42/edit 的视图
- 用户看到更新的数据并且很高兴。
- 一小时后,他们单击刷新以查看是否有其他人弄乱了产品 #42。
- 由于 /products/42/edit 的最后一次检索是 POST,因此他们的浏览器要求重新提交表单数据。这很烦人并且很危险,因为它可能会覆盖其他人的数据。
我担心即使我为 POST 和 GET 使用两个不同的 URL(比如 /products/42/edit 和 /products/42),浏览器仍会要求重新发布并可能破坏数据。我弄错了吗?
可以使用哪些替代方法,以便在提交产品更改后,用户可以安全地点击刷新以获取更新的视图?
更新我现在看到我的问题和我的设计很混乱,对此我深表歉意。我发现在 POST 和 GET 之间共享 URL(操作)对我来说是个坏主意。我是否可以假设如果这两者不同,那么我就不会有“刷新导致重新发布”的问题?
【问题讨论】:
-
我不明白这个问题。用户提交他们的编辑,这些被写入数据库,然后用户被引导到产品的当前视图。他们点击 F5 和产品更新的当前视图。问题出在哪里?
-
考虑在你的控制器方法和视图中发布一些代码,这样我们就可以看到发生了什么。
-
我已经澄清了这个问题(我希望如此)。我发现在 POST 和 GET 之间共享 URL 对我来说是个坏主意。我是否可以假设如果这两者不同,那么我就不会有“刷新导致重新发布”问题?
标签: asp.net-mvc usability