如何从一个异步操作重定向到另一个异步操作 (MVC5)
本文关键字:异步操作 重定向 另一个 MVC5 一个 | 更新日期: 2023-09-27 18:34:18
我的网站有一个管理员部分,我希望管理员能够添加新用户。我还有一个单独的注册链接,它有效。
我想使用 ajax
来更新我的管理部分。所以计划是:
- 管理员填写用户信息表格
-
AdminController
检查它是否有效,然后重定向到AuthenticationController
方法以创建用户 - 如果
AuthController
返回成功,则重新加载所有用户的列表 - 将其返回到部分以更新屏幕。
调试代码时,我点击了管理控制器,但我无法进入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
。(这就是让我怀疑异步无法正常工作的原因(。
在这里的概念有什么问题吗,是什么导致了我看到的调试行为?
应
将RedirectToAction
返回到响应中,以便访问者的浏览器可以重定向到给定的URL。只有在这种情况发生之后,你才会按下RegisterAsyncFromOtherController
动作。
您似乎将RedirectToAction()
与Response.Redirect()
混淆了。
RedirectToAction()
返回一个RedirectToRouteResult
(继承自ActionResult
(,您必须将其返回给调用方才能使其产生任何效果。如果你不归还它,RedirectToAction()
什么都不会做?