1

私はIndividual User Accountsという認証を持つASP.NETコアアプリケーションを持っています。デフォルトでは、アプリはAccountController, RegisterViewModel, Register.cshtml etcを以下のように作成します。 RegisterViewModelのRoleドロップダウンに2つのプロパティを追加し、そのドロップダウンをRegister.cshtmlビューに表示して、管理者が新しく作成されたユーザーのロールを選択できるようにしました。組み込みのRegister.cshtmlビューでロールのドロップダウンを追加し、Reginsterアクションメソッドで選択した値を取得する

質問:次のRegister for Postメソッドでは、Register.cshtmlビューから選択した役割adminを取得するにはどうすればよいですか?つまり、このポストアクションメソッドでは、選択したロールをどのように使用すれば新しく作成されたユーザーをそのロールに追加できますか?

RegisterViewModel

public class RegisterViewModel 
{ 
     [Required] 
     [Display(Name = "Login")] 
     public string UserName { get; set; } 

     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [DataType(DataType.Password)] 
     [Display(Name = "Confirm password")] 
     [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
     public string ConfirmPassword { get; set; } 

     [Display(Name = "Select Role")] 
     public ApplicationRole SelectedRole { get; set; } 
     public IEnumerable<SelectListItem> Roles { get; set; } 
} 

AccountControllerアクションメソッド

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null) 
     { 
      ViewData["ReturnUrl"] = returnUrl; 
      if (ModelState.IsValid) 
      { 
       var user = new ApplicationUser { UserName = model.UserName, StateID=model.StateID, Region=model.Region }; 
       var result = await _userManager.CreateAsync(user, model.Password); 
       if (result.Succeeded) 
       { 
        await _signInManager.SignInAsync(user, isPersistent: false); 
        _logger.LogInformation(3, "User created a new account with password."); 
        return RedirectToLocal(returnUrl); 
       } 
       AddErrors(result); 
      } 

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

答えて

1

あなたのビューモデルのビューの設定にDを選択したパラメータ、その後

[Display(Name = "Selected Role")] 
    public int SelectedRole{ get; set; } 

を追加このように下げます

これは、あなたのモデルにドロップダウンの結果を結びつけます。あなたのコントローラモデルで選択したロールには、選択したIDが必要です

+0

ありがとうございました。私は[_userManager.AddToRoleAsync(user、RoleName)]を使用しています(https://msdn.microsoft.com/en-us/library/dn497537(v=108).aspx)。 roleID。だから私はこれをどのように達成するのですか?ロールを作成する方法については – nam

+0

を参照してください。 nameフィールドとvalueフィールドの両方に名前を入力します。これが返されます。また、モデルのパラメータをintではなくstringに変更します。 –

+0

あなたのソリューションとコメントに続いて、今すぐ動作します - ありがとうございます。 – nam

関連する問題