【发布时间】:2021-06-17 07:48:30
【问题描述】:
我已经看到很多关于这个问题的问题,但没有一个能解决我的问题。
我的问题:我的重定向操作方法命中了我被重定向到的方法,但视图停留在同一页面上,它永远不会更改为重定向的页面。
来自我的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/Index
但它应该重定向到
https://localhost:44339/Home/PipelineList
代码:
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> PipelineList()
{
List<PipelineViewModel> itemList = new List<PipelineViewModel>();
/// my other code goes here
return View(itemList);
}
注意:当我直接从 UI 访问此操作方法时,我的 PipelineList() 工作正常。我在这里做错了什么,我该怎么做才能重定向到 URL?
我正在使用 .NET Core 5。
这是我来自StartUp.cs的路由信息:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action="SignIn"});
});
更新 谢谢大家指出我遇到的问题。 我需要使用 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 });
}
}
更新的 AJAX:
$.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");
}
}
});
我知道这可能不是最好的解决方案,但就目前而言,它确实有效。非常感谢@Sergey 和@Filipe
【问题讨论】:
-
由于您使用的是 Ajax,它不会重定向而是返回到 ajax。这也是人们使用 ajax 的原因之一。如果您想重定向到另一个页面,为什么不使用提交表单?
-
谢谢@Sergey,我会试试的,然后更新你。
-
另一种方法是改变你的 ajax 成功:function (response) { window.location.href localhost:44339/Home/PipelineList }。但在这种情况下,您可能会丢失一些数据。
-
我同意谢尔盖的观点。在这种情况下,您真的不需要 Ajax。只需提交表单。
标签: c# ajax asp.net-core-mvc redirecttoaction