2

これが私の問題です:

私はMVCインターネットアプリケーションに取り組んでおり、ユーザーを管理しようとしています。まず、編集ビューに、選択したユーザーのユーザー名と役割が表示されます。ユーザーを選択できるロールは、HTMLビューのDropDownListForに一覧表示されます。[このユーザーを編集]をクリックすると、次のエラーが表示されます。

キー«RoleId»を持つViewData要素はタイプ«System.Int32»ですが、«IEnumerable»である必要があります。

これが私のビューモデルです:

using GestionStages.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc; >

> namespace GestionStages.Areas.Stages.ViewModels
{
    public class UserRoleViewModel
    {
        public RegisterModel Register { get; set; }
        public SelectList Roles { get; set; }
        public UserProfile User { get; set; }
        public String CurrentUserName { get; set; }

        [Required(ErrorMessage = "A role is required")]
        public int RoleId { get; set; }
    }
}

これが私のHTML編集ビューの一部です:

<div class="form_row">
     @Html.Label("Roles")
     @Html.DropDownListFor(x => x.RoleId,  Model.Roles)
</div>

これが私のコントローラーの編集メソッドです:

public ActionResult Edit(int id = 0)
{
    UserRoleViewModel model = new UserRoleViewModel();
    model.User = db.UserProfiles.Find(id);

    if (model.User == null)
    {
        return HttpNotFound();
    }

    model.Roles = new SelectList(db.webpages_Roles.ToList(), "RoleId", "RoleName");
    model.CurrentUserName = model.User.UserName;
    model.RoleId = model.User.webpages_Roles.FirstOrDefault().RoleId;

    return View(model);
}

//
// POST: /Sales/Sale/Edit/5

[HttpPost]
public ActionResult Edit(UserRoleViewModel model)
{
    if ((model.User.UserName != model.CurrentUserName && db.UserProfiles.Where(x => x.UserName == model.User.UserName).Any()))
    {
        ModelState.AddModelError("", "The user is already in the database");
    }
    if (ModelState.IsValid)
    {
        db.Entry(model.User).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(model);
}

助けてくれてありがとう

4

0 に答える 0