2017-09-17 13 views
0

私の次のアクションメソッドでは、design time errorという行がvar result = await _userManager.AddToRoleAsync(user, "AdminRole");に続いています。しかし、私がvar user = new ApplicationUser { UserName = model.SelectedUserNameを使用してユーザーを取得した場合、上記の行は設計時エラーを表示しません。予想通り、run time validation errorUser someUSerName already existとなります。実行時エラーは、既存のユーザーに役割を追加していて、その新しいインスタンスを渡していることが原因であると私は理解しています。 質問:既存のユーザーをApplicationUserオブジェクトとして取得するには、どうすればいいですか?下にAddToRoleAsync(....)に渡すことはできますか?私はASP.NET Core 1.1.1、個人ユーザーアカウントモード、VS2017を使用しています。指定したユーザーのApplicationUserオブジェクトを取得する方法

エラー

Cannot convert from Task<MyProj.Model.ApplicationUser> to MyProj.Model.ApplicationUser 

コントローラ

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> AddUserToRole(RoleRelatedViewModel model, string returnUrl = null) 
{ 
    ViewData["ReturnUrl"] = returnUrl; 
    if (ModelState.IsValid) 
    { 
     var user = _userManager.FindByNameAsync(model.SelectedUserName); //cannot be used in AddToRoleAsync(user,"AdminRole") since FindByNameAsync returns Task<ApplicationUser> 
     //var user = new ApplicationUser { UserName = model.SelectedUserName }; 
     var result = await _userManager.AddToRoleAsync(user, "AdminRole"); 
     if (result.Succeeded) 
     { 
      return RedirectToLocal(returnUrl); 
     } 
     AddErrors(result); 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

答えて

3

は、それがAddToRoleAsyncように思えるvar user = await _userManager.FindByNameAsync(model.SelectedUserName);

が最初のパラメータとしてApplicationUserを期待してみてください、しかし、あなたは、あなたが使用している場合、タスク を与えますはFindByNameAsyncの前にを待ちますユーザー変数はApplicationUserになります。

+0

あなたのソリューションは機能しました。あなたは実際に私に 'await'の本当の使い方を説明しました(ありがとう)。あなたの提案された解決策にはタイプミスがあります。あなたは 'await _userManager.c(model.SelectedUserName);'でFindByNameAsync'を見逃したでしょう。他の読者のために、あなたのソリューションを編集してもらえますか?私はそれを「回答」としてマークします。 – nam

関連する問題