Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 无法重定向ASP.NET核心MVC项目控制器中的其他页面_Asp.net Core - Fatal编程技术网

Asp.net core 无法重定向ASP.NET核心MVC项目控制器中的其他页面

Asp.net core 无法重定向ASP.NET核心MVC项目控制器中的其他页面,asp.net-core,Asp.net Core,我想按下一个按钮来连接一个GETAPI,做一些事情并重定向页面 const Http = new XMLHttpRequest(); Http.open("GET", '/Startup/Action/Test'); Http.send(); Http.onreadystatechange = (e) => { console.log(Http.responseText) } 然后在我的控制器中: [HttpGet("Sta

我想按下一个按钮来连接一个GETAPI,做一些事情并重定向页面

    const Http = new XMLHttpRequest();
    Http.open("GET", '/Startup/Action/Test');
    Http.send();
    Http.onreadystatechange = (e) => {
        console.log(Http.responseText)
    }
然后在我的控制器中:

    [HttpGet("Startup/Action/{Handle}")]
    public IActionResult Action(string Handle)
    {
        this.ViewData["Result"] = Handle;

        return this.Ok(Handle);

        // return LocalRedirect("~/Startup/");
        // return Redirect("http://localhost:50429/");
        // return View("~/Views/Startup/Index.cshtml");
        // return Redirect("/");
        // return RedirectToAction("Index", "Startup");
    }

我得到响应并在javascript XMLHttpRequest事件编写的控制台中看到它。但是,我不能重定向到另一个页面。我尝试了上面注释为返回值的所有选项。

使用AJAX,您不在服务器端执行重定向,而是在收到结果后在客户端执行重定向。大概是这样的:

Http.onreadystatechange = (e) => {
    if(xhr.readyState === 4 && xhr.status === 200) {
        window.location.href = '@Url.Action("Index", "Startup")';
    } else {
        // non-success reaponse?  do something else?
    }
}
上述代码将在成功的AJAX响应后重定向。请注意,要使用
Url.Action()
helper,此JavaScript代码需要位于视图本身上。如果JavaScript代码位于单独的文件中,一个选项是在AJAX响应中以字符串形式返回要重定向到的URL

但是请注意,您在这里所做的有点不同:

this.ViewData["Result"] = Handle;
我可能错了,但我怀疑这不会继续重定向<代码>临时数据可能吗?但最终问题变成了。。。你到底想完成什么?您正在向服务器发送一个值,然后尝试将用户重定向到另一个页面以包含该值。客户机已经知道这个值了,因为它是AJAX,所以客户机需要执行重定向,所以这个AJAX操作有必要吗

我不完全清楚这里的总体目标是什么,我怀疑总体设置可以大大简化。但看起来这里需要AJAX。您可以将服务器端代码还原为执行重定向,而不是使用AJAX,只需将客户端完全重定向到该服务器端操作:

window.location.href = '/Startup/Action/Test';
或:

然后按照最初尝试的方式重定向服务器端操作:

[HttpGet("Startup/Action/{Handle}")]
public IActionResult Action(string Handle)
{
    this.ViewData["Result"] = Handle;
    return RedirectToAction("Index", "Startup");
}

仍然有可能,
ViewData
在这里不正确,我也不确定,您可能希望在重定向时使用
TempData
。不过,同样的,无论你想完成什么,一开始都可以更有效地完成。例如,完全跳过此
操作
操作方法,只将
句柄
值直接传递给
索引
操作,不管它使用该值做什么。

您不能在服务器端对
ajax
请求进行重定向,但是,您可以在
onreadystatechange事件中发回重定向的
url
,然后通过设置
窗口.location.href
,使用
javascript
重定向到提供的
url
,请参阅本文()
[HttpGet("Startup/Action/{Handle}")]
public IActionResult Action(string Handle)
{
    this.ViewData["Result"] = Handle;
    return RedirectToAction("Index", "Startup");
}