【发布时间】:2014-12-15 12:15:17
【问题描述】:
我的网站有一个管理员部分,我希望管理员能够在其中添加新用户。 我还有一个单独的注册链接,可以使用。
我想使用ajax 来更新我的管理部分。所以计划是:
- 管理员填写用户信息表格
-
AdminController检查是否有效,然后重定向到AuthenticationController方法创建用户 - 如果
AuthController返回成功,则重新加载所有用户列表 - 将此返回到部分以更新屏幕。
当我调试代码时,我点击了管理控制器,但我无法进入 AuthController 以查看它失败的原因。 (一切编译OK)
我认为这与我的两个方法都是异步的这一事实有关,但我不能等待从一个到另一个的重定向。
简单来说,代码是;
[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。 (这让我怀疑异步工作不正常)。
我在这里的概念有什么问题吗?是什么导致了我看到的调试行为?
【问题讨论】:
-
在那之后你对
foo变量做了什么?它已经消失在未闭合的花括号中。 -
重定向到方法永远不会返回,因此该行之后的代码与手头的问题无关。
-
您是说在调试器中运行代码之后,还是基于您的假设?
RedirectToAction()确实 返回,您必须使用它的返回值才能使其发挥作用。有关详细信息,请参阅我的答案。 -
我使用了调试器,重定向到只是消失在以太中。我认为您的分析器是有道理的,所以这让我想知道是否有更好的方法来实现我想做的事情,或者我返回浏览器告诉它重定向到帐户控制器,然后需要重定向到我的管理部分。 (只是看起来有点笨拙!)
标签: c# asp.net-mvc asynchronous