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