これが私の問題です:
私は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);
}
助けてくれてありがとう