Der Wert kann nicht Null sein. Parametername: Elemente (in Dropdown-Liste) ASP.NET MVC5

Ich habe ein Problem mit meinem Code. Ich verwende das mit MVC5 gelieferte Registrierungsformular. Ich habe ein Feld "Rolle" als Dropdown-Liste hinzugefügt, um dem Benutzer beim Erstellen eines neuen Benutzers eine Rolle zuzuweisen. wie im Bild unten

Nun dazu habe ich das "RegisterViewModel" modifiziert und die folgenden Eigenschaften hinzugefügt

        public IdentityRole Role { get; set; }

        [Required]
        [Display(Name = "Roles List")]
        public IEnumerable<IdentityRole> RolesList { get; set; }

In "AccountController" habe ich die Registrierungsaktion, die das Registrierungsformular erhält, folgendermaßen geändert:

// GET: /Account/Register
        [AllowAnonymous]
        public ActionResult Register()
        {

            var _context = new ApplicationDbContext();
            var roles = _context.Roles.ToList();

            var viewModel = new RegisterViewModel
            {
                RolesList = roles
            };
            return View(viewModel);

        }

In der Ansicht "Register.cshtml" habe ich diese Dropdown-Liste hinzugefügt, um Rollen in die Ansicht zu laden und die Rolle an den Controller zu senden.

<div class="form-group">
        @Html.LabelFor(m => m.Role.Id, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.DropDownListFor(m => m.Role, new SelectList(Model.RolesList, "Name", "Name"), "Select Role", new { @class = "form-control" })
        </div>
    </div>

in Controller registrieren, der das Registrierungsformular postet, ich fügte dies hinzu

// POST: /Account/Register
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser() { UserName = model.UserName , centerName = model.centerName };
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    var role = new IdentityRole(model.Role.Name);

                    //I added this line to store the user and its roles in AspNetUserRoles table
                    await UserManager.AddToRoleAsync(user.Id, role.Name);

                    await SignInAsync(user, isPersistent: false);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    AddErrors(result);
                }
            }

Wenn ich versuche, den Benutzer zu registrieren und das Formular zu senden, erhalte ich die folgende Fehlermeldung:

Server Error in '/' Application.

Value cannot be null.
Parameter name: items

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: items

Source Error: 


Line 41:         @Html.LabelFor(m => m.Role.Name, new { @class = "col-md-2 control-label" })
Line 42:         <div class="col-md-10">
Line 43:             @Html.DropDownListFor(m => m.Role, new SelectList(Model.RolesList, "Name", "Name"), "Select Role", new { @class = "form-control" })
Line 44:         </div>
Line 45:     </div>

Source File: c:..\TransactionsSystem\Views\Account\Register.cshtml    Line: 43 

Ich habe verschiedene Lösungen versucht, um es zu lösen, aber nichts hat funktioniert, kann jemand helfen oder beraten?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage