1

デフォルトの mvc6 プロジェクトにロールを追加しようとしています。register.cshtml で例外が発生します

@model TransparentEnergy.Models.RegisterViewModel

<div class="col-md-6">
    <div class="card">
      <div class="card-header">
          <h2>Register New User</h2>
      </div>
       <div class="card-body card-padding">
            @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
           {
              @Html.AntiForgeryToken()
                @Html.ValidationSummary("", new { @class = "text-danger" })
            <div class="card-body card-padding">
                <div class="form-group">
                    <label for="Email" class="col-sm-2 control-label">Email</label>
                    <div class="col-sm-10">
                        <div class="fg-line">
                            @Html.TextBoxFor(m => m.Email, new { @class = "form-control fg-input" })
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <label for="Password" class="col-sm-2 control-label">Password</label>
                    <div class="col-sm-10">

                        <div class="fg-line">
                            @Html.PasswordFor(m => m.Password, new { @class = "form-control fg-input" })
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <label for="ConfirmPassword" class="col-sm-2 control-label">Confirm Password</label>
                    <div class="col-sm-10">

                        <div class="fg-line">
                            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control fg-input" })
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <label for="Name" class="col-sm-2 control-label">Role Type</label>
                    <div class="col-sm-10">
                        <div class="fg-line select">
                                @Html.DropDownList("Name", null, new { @class = "form-control selectpicker"})
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                        <button type="submit" class="btn btn-primary btn-lg">Register</button>
                    </div>
                </div>
            </div>

        }

        @section Scripts {
            @Scripts.Render("~/bundles/jqueryval")
        }

    </div>
</div>

エラーメッセージは

キー 'Name' を持つ ViewData アイテムはタイプ 'System.String' ですが、タイプ 'IEnumerable' である必要があります。

アカウントコントローラー

   // GET: /Account/Register
    [AllowAnonymous]
    public ActionResult Register()
    {
        ViewBag.Name = new SelectList(context.Roles.ToList(), "Name", "Name");
        return View();
    }

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

                //Assign Role to user Here 
                await this.UserManager.AddToRoleAsync(user.Id, model.Name);
                //Ends Here


                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

                return RedirectToAction("Index", "Home");
            }
            AddErrors(result);
        }

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

RegisterViewModel

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

    [Required]
    [Display(Name = "Full Name")]
    public string FullName { get; set; }

    [Required]
    [Display(Name = "Role")]
    public string Name { get; set; }
}
4

1 に答える 1