如何从一个异步操作重定向到另一个异步操作 (MVC5)

本文关键字:异步操作 重定向 另一个 MVC5 一个 | 更新日期: 2023-09-27 18:34:18

我的网站有一个管理员部分,我希望管理员能够添加新用户。我还有一个单独的注册链接,它有效。

我想使用 ajax 来更新我的管理部分。所以计划是:

  1. 管理员填写用户信息表格
  2. AdminController检查它是否有效,然后重定向到AuthenticationController方法以创建用户
  3. 如果AuthController返回成功,则重新加载所有用户的列表
  4. 将其返回到部分以更新屏幕。

调试代码时,我点击了管理控制器,但我无法进入AuthController以查看它失败的原因。(一切都编译正常(

我认为这与我的两种方法都是异步的这一事实有关,但我无法等待从一种重定向到另一种。

简而言之,代码是;

[Authorize(Roles = "AccessAllAreas")]
[HttpPost]
[ValidateAntiForgeryToken()]        
public async Task<PartialViewResult> CreateNewUser(ApplicationUserViewModel avm)
{
    if (ModelState.IsValid)
    {
        try
        {
            var foo = RedirectToAction("RegisterAsyncFromOtherController", "Account", avm);
    ....
    }
[Authorize(Roles = "AccessAllAreas")]
[ValidateAntiForgeryToken()]
public async Task<ActionResult> RegisterAsyncFromOtherController(ApplicationUserViewModel model)
{
    if (ModelState.IsValid)
    {
        ....
    }
}

永远不会命中上述if (Modelstate.IsValid)上的断点。但是,断点然后在调用时单步执行RegisterAsyncFromOtherController()访问视图模型上的某个属性,然后返回到CreateNewUser。(这就是让我怀疑异步无法正常工作的原因(。

在这里的概念有什么问题吗,是什么导致了我看到的调试行为?

如何从一个异步操作重定向到另一个异步操作 (MVC5)

RedirectToAction返回到响应中,以便访问者的浏览器可以重定向到给定的URL。只有在这种情况发生之后,你才会按下RegisterAsyncFromOtherController动作。

您似乎将RedirectToAction()Response.Redirect()混淆了。

RedirectToAction()返回一个RedirectToRouteResult(继承自ActionResult(,您必须将其返回给调用方才能使其产生任何效果。如果你不归还它,RedirectToAction()什么都不会做?