gpt4 book ai didi

asp.net-mvc - POST 后重定向不会更改 URL

转载 作者:行者123 更新时间:2023-12-02 17:11:50 26 4
gpt4 key购买 nike

我正在使用“发布后重定向”(http://en.wikipedia.org/wiki/Post/Redirect/Get)模式来解决它解决的刷新问题,但我没有看到POST 和后续 GET 之后的 URL 更改。

这是我的设置:

我有一个表单,其中包含一些相当广泛的客户端验证,然后提交。

@using (Html.BeginForm("AddItem", "Order", FormMethod.Post, new { Id = "addItemForm" })) 
{
// form stuff
}

客户端验证:

$('#addToOrder').click(function () {
// do a bunch of validation stuff.
}

if (criteriaMet) {
$('#addItemForm').submit();
}

“AddItem” Controller :

public class OrderController {

[HttpPost]
public ActionResult AddItem(long? orderId, long menuItemId)
{
if (oneConditionIsTrue)
{
return RedirectToRoute("NamedRoute1", new { RouteValueDictionary values });
}
else
{
return RedirectToRoute("NamedRoute2", new { RouteValueDictionary values });
}
}

public class NamedRouteController
{
public ActionResult NamedRouteAction
{
// do some stuff
if (mobile)
{
return View("MobileView", model);
}
else
{
return View("RegularView", model);
}
}

从 POST 操作 (AddItem) 重定向后,我可以通过 GET 操作逐步执行返回操作(任一操作)。我希望浏览器中的 URL 是 http://mydomain.com/NamedRoute/NamedRouteAction但这是http://mydomain.com/Order/AddItem 。为什么是这样? RedirectToRoute 不应该更改 URL 吗?

我错过了什么?

最佳答案

我怀疑 Controller 操作是通过 AJAX 请求以某种方式调用的。例如,如果您使用 jQuery Mobile 或其他东西,则可能会发生这种情况。或者也许您编写了一些其他脚本来执行此操作 - 它劫持表单提交并发送 AJAX 请求。由于它是 AJAX 请求,因此您不可能期望客户端浏览器中的 url 会发生变化 - 这就是 AJAX 的全部要点 - 保持在同一页面上。

使用 FireBug 等 JavaScript 调试工具可以很容易地验证这一点。只需查看“网络”选项卡,看看 POST 请求是否是 AJAX 请求。在Net选项卡中找到该请求并查看是否有以下请求 header :

X-Requested-With: XMLHttpRequest

jQuery 将此 HTTP header 附加到它发送的所有 AJAX 请求中。

所以基本上,如果您希望在 POST 请求后发生重定向,则不应使用 AJAX 来提交表单。或者更准确地说:重定向发生在服务器端(您将再次在 FireBug 中看到它 - 302 状态代码),然后 XMLHttpRequest 只是遵循此重定向,但客户端浏览器不会更改其当前位置。

关于asp.net-mvc - POST 后重定向不会更改 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14096264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com