繁体   English   中英

ASP.NET 核心 MVC RedirectToAction 不工作

[英]ASP.NET Core MVC RedirectToAction isn't working

我已经看到很多关于这个问题的问题,但没有一个能解决我的问题。

我的问题:我的重定向操作方法命中了我被重定向到的方法,但视图保持在同一页面上,它永远不会更改为重定向的页面。

从我的Index.chstml我正在创建一个局部视图。

从使用 AJAX 的部分视图来看,我正在向我的 controller 提交请求。 AJAX 代码如下

        $.ajax({
                method: 'POST',
                url: "/Home/SubmitTest",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(arr),
                success: function (response) {
                }
            });

我的 controller 代码在这里。 我正在从 AJAX 方法接收数据并执行一些工作。 最后,我试图将用户重定向到另一种方法。

[HttpPost]
public IActionResult SubmitTest([FromBody] List<TestSubmitViewModel> data)
{
    // Rest of the code goes here
    return RedirectToAction(nameof(PipelineList));
}

我重定向到的方法如下。 两种方法都在同一个 controller 中。 重定向后,我遇到了这种方法。 但我的观点仍然停留在之前的 URL 即

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 创建的表)。

最后,我通过更改我的 Controller 和 AJAX 代码使其工作。

更新了 Controller:

[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

正如@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>

结果:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM