har*_*ers 2 .net c# asp.net-mvc
我的家庭控制器中有以下操作.当我发布到GetDistance()它时,它永远不会进入/ Home/ShowDistance页面,而是停留在/ Home/Index页面上.我已经检查过lat和lon值不为null,因此浏览器应该重定向到/ 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();
}
Run Code Online (Sandbox Code Playgroud)
在您的Index.cshtml视图中,请确保指定要发布到的正确的控制器操作(因为它具有与用于呈现表单的名称不同的名称).所以代替:
@using (Html.BeginForm())
{
...
}
Run Code Online (Sandbox Code Playgroud)
使用:
@using (Html.BeginForm("GetDistance", null))
{
...
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您不使用标准HTML <form>来调用GetDistance动作而是使用AJAX调用,那么浏览器URL保持不变是完全正常的/Home/Index.AJAX的重点是向服务器执行异步HTTP请求,而无需导航离开当前页面(在您的情况下/Home/Index).如果是这种情况并且您想要重定向,则必须在成功回调中在客户端上执行此操作:
$.ajax({
url: '@Url.Action("GetDistance")',
type: 'POST',
data: { lat: '123', lon: '456' },
success: function(result) {
window.location.href = result.redirectTo;
}
});
Run Code Online (Sandbox Code Playgroud)
您还必须修改GetDistancePOST操作,以便不是重定向而是返回一个JSON对象,其中包含要重定向到的目标URL,可以在成功回调中使用:
[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") });
}
Run Code Online (Sandbox Code Playgroud)
显然,这种方式稍微违背了AJAX的目的,因为正如我所说,AJAX的重点是对服务器执行异步请求并保持在同一页面上.所以在这种情况下,您应该坚持使用标准HTML <form>.