gpt4 book ai didi

c# - 发布后 MVC3 不重定向

转载 作者:行者123 更新时间:2023-11-30 19:46:06 25 4
gpt4 key购买 nike

我的家庭 Controller 中有以下操作。当我发布到 GetDistance() 时,它永远不会转到/Home/ShowDistance 页面,而是停留在/Home/Index 页面上。我检查过 latlon 值不为空,因此浏览器应该重定向到/Home/ShowDistance。

public ActionResult Index()
{
return View();
}

[HttpPost]
public ActionResult GetDistance(string lat, string lon)
{
if (lat != null && lon != null)
{
Session["latlon"] = new LatLon { Latitude = double.Parse(lat), Longitude = double.Parse(lon) };
return RedirectToAction("ShowDistance");
}
return RedirectToAction("Index");
}

public ActionResult ShowDistance()
{
//...
return View();
}

最佳答案

在您的 Index.cshtml View 中,确保您指定了要发布到的正确 Controller 操作(因为它的名称与用于呈现表单的名称不同)。所以不是:

@using (Html.BeginForm())
{
...
}

使用:

@using (Html.BeginForm("GetDistance", null))
{
...
}

或者,如果您不使用标准 HTML <form> 来调用 GetDistance 操作,而是使用 AJAX 调用,那么浏览器 url 保持在 /Home/Index 是完全正常的。 AJAX 的重点是在不离开当前页面(在您的情况下为 /Home/Index )的情况下向服务器执行异步 HTTP 请求。如果是这种情况并且您想重定向,则必须在成功回调中在客户端上执行此操作:

$.ajax({
url: '@Url.Action("GetDistance")',
type: 'POST',
data: { lat: '123', lon: '456' },
success: function(result) {
window.location.href = result.redirectTo;
}
});

您还必须修改您的 GetDistance POST 操作,这样它就不会重定向,而是返回一个包含要重定向到的目标 url 的 JSON 对象,该对象可以在成功回调中使用:

[HttpPost]
public ActionResult GetDistance(string lat, string lon)
{
if (lat != null && lon != null)
{
Session["latlon"] = new LatLon { Latitude = double.Parse(lat), Longitude = double.Parse(lon) };
return Json(new { redirectTo = Url.Action("ShowDistance") });
}
return Json(new { redirectTo = Url.Action("Index") });
}

显然,这种方式有点违背了 AJAX 的目的,因为正如我所说,AJAX 的全部意义在于对服务器执行异步请求并保持在同一页面上。所以在这种情况下,您应该坚持使用标准的 HTML <form>

关于c# - 发布后 MVC3 不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9264300/

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