C# ASP.NET核心MVC重定向到操作isn';行不通
我看到了很多关于这个问题的问题,但没有一个解决了我的问题 我的问题:我的重定向操作方法命中了我被重定向到的方法,但是视图保持在同一页上,它永远不会更改为重定向的页面 从我的C# ASP.NET核心MVC重定向到操作isn';行不通,c#,ajax,asp.net-core-mvc,redirecttoaction,C#,Ajax,Asp.net Core Mvc,Redirecttoaction,我看到了很多关于这个问题的问题,但没有一个解决了我的问题 我的问题:我的重定向操作方法命中了我被重定向到的方法,但是视图保持在同一页上,它永远不会更改为重定向的页面 从我的Index.chstml中,我正在创建一个局部视图 从这个使用AJAX的局部视图中,我向我的控制器提交了一个请求。下面是AJAX代码 $.ajax({ method: 'POST', url: "/Home/SubmitTest"
Index.chstml
中,我正在创建一个局部视图
从这个使用AJAX的局部视图中,我向我的控制器提交了一个请求。下面是AJAX代码
$.ajax({
method: 'POST',
url: "/Home/SubmitTest",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(arr),
success: function (response) {
}
});
我的控制器代码在这里。我从AJAX方法接收数据并执行一些工作。最后,我尝试将用户重定向到另一个方法
[HttpPost]
public IActionResult SubmitTest([FromBody] List<TestSubmitViewModel> data)
{
// Rest of the code goes here
return RedirectToAction(nameof(PipelineList));
}
但它应该重定向到
https://localhost:44339/Home/PipelineList
代码:
更新
谢谢你们指出我遇到的问题。
我需要使用AJAX从UI传递所选值(来自JS创建的表)
最后,我通过更改控制器和AJAX代码使其正常工作
更新控制器:
[HttpPost]
public async Task<JsonResult> SubmitTest([FromBody]
List<TestSubmitViewModel> data)
{
try
{
// my codes goes here
return Json(new {StatusCode = statusCode });
}
catch (Exception)
{
return Json(new {StatusCode = 500 });
}
}
我知道这可能不是最好的解决方案,但就目前而言,它确实奏效了。非常感谢@Sergey和@Filipe,正如@Sergey所说,您在ajax中使用了错误的前辈。当您希望更新部分页面而不是刷新整个页面以提高客户体验和页面加载速度时,通常使用Ajax。如果您想重定向到另一个页面,并且没有其他具体原因,那么就不需要使用ajax 您可以发现ajax服务器已将正确的302重定向返回到客户端,并重定向到新页面: 正确的方法是直接重定向到新页面,如下所示:
<form asp-action="SubmitTest" asp-controller="Home" method="post">
@*Other input value you want to submit*@
<input type="submit" value="Click"/>
</form>
@*要提交的其他输入值*@
结果:
因为您使用的是Ajax,所以它不会重定向,而是返回到Ajax。这就是人们使用ajax的原因之一。如果你想重定向到另一个页面,为什么不使用提交表单?谢谢@Sergey,我会尝试一下,并向你更新。另一种方法是更改ajax成功:函数(响应){window.location.href}。但在这种情况下,你可能会丢失一些数据。我同意谢尔盖的观点。在这种情况下,您并不真正需要Ajax。只需提交表格。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action="SignIn"});
});
[HttpPost]
public async Task<JsonResult> SubmitTest([FromBody]
List<TestSubmitViewModel> data)
{
try
{
// my codes goes here
return Json(new {StatusCode = statusCode });
}
catch (Exception)
{
return Json(new {StatusCode = 500 });
}
}
$.ajax({
method: 'POST',
url: "/Home/SubmitTest",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(arr),
success: function (response) {
if (response.statusCode == 200) {
var url = "/GitLab/PipelineList";
window.location.href = url;
} else {
alert("error");
}
}
});
<form asp-action="SubmitTest" asp-controller="Home" method="post">
@*Other input value you want to submit*@
<input type="submit" value="Click"/>
</form>