私は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);
}
ありがとうございました。私は[_userManager.AddToRoleAsync(user、RoleName)]を使用しています(https://msdn.microsoft.com/en-us/library/dn497537(v=108).aspx)。 roleID。だから私はこれをどのように達成するのですか?ロールを作成する方法については – nam
を参照してください。 nameフィールドとvalueフィールドの両方に名前を入力します。これが返されます。また、モデルのパラメータをintではなくstringに変更します。 –
あなたのソリューションとコメントに続いて、今すぐ動作します - ありがとうございます。 – nam