传递给字典的模型是.Data.Entity.Infrastructure.DbQuery类型,但它需要一个类型为'System.Collections.Generic.IEnumerable的模型

时间:2015-07-30 09:00:32

标签: entity-framework asp.net-mvc-4

我想做的是

的UserRole:

public class UserRolesController : Controller
{
    private HMSEntities db = new HMSEntities();
    //
    // GET: /UserRoles/

    public ActionResult Index()
    {
        User user = (User)Session["User"];
        var usr = db.Users.Find(user.Id);
        ViewBag.Id = usr.Id;
        ViewBag.FirstName = usr.FirstName;
        if (Session["User"] != null)
        {
            var role = db.Roles.Where(u => u.Id == user.RoleId);
        }
        return View(usr);

    }

Index.cshtml

@model IEnumerable<HMS.Models.User>
@using HMS.Models;

在此项目中,当用户登录时,用户可以查看其详细信息,然后对该用户的角色执行crud操作,但是我收到错误:

  

传递到字典中的模型项是类型的   'System.Data.Entity.Infrastructure.DbQuery 1[HMS.Models.Role]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [HMS.Models.User]'。

我的模特是:

Role.cs

public partial class Role
{
    public Role()
    {
        this.Users = new HashSet<User>();
    }

    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<User> Users { get; set; }
}

User.cs

public partial class User
{
    public User()
    {
        this.Accesses = new HashSet<Access>();
        this.Doctors = new HashSet<Doctor>();
        this.Patients = new HashSet<Patient>();
        this.Staffs = new HashSet<Staff>();
    }

    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Nullable<System.DateTime> DOB { get; set; }
    public Nullable<int> Age { get; set; }
    public Nullable<int> PhoneNo { get; set; }
    public Nullable<int> LandlineNO { get; set; }
    public Nullable<bool> Status { get; set; }
    public string PermentAddress { get; set; }
    public string TemproryAddress { get; set; }
    public string BloodGroup { get; set; }
    public string Gender { get; set; }
    public string EducationFinal { get; set; }
    public string Experience { get; set; }
    public string EmailId { get; set; }
    public byte[] Image { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public Nullable<int> RoleId { get; set; }

    public virtual ICollection<Access> Accesses { get; set; }
    public virtual ICollection<Doctor> Doctors { get; set; }
    public virtual ICollection<Patient> Patients { get; set; }
    public virtual Role Role { get; set; }
    public virtual ICollection<Staff> Staffs { get; set; }
}

我是mvc的新手,不知道还能做什么。如果需要任何进一步的代码,请告诉我们并回复。

1 个答案:

答案 0 :(得分:0)

db.Roles.Where(u => u.Id == user.RoleId); 

返回DBQuery:

您必须将其转换为List或Enumerable。

ViewBag.role = db.Roles.Where(u => u.Id == user.RoleId).AsEnumerable();

return View(ViewBag.role);

如果您使用List:或

ViewBag.role = db.Roles.Where(u => u.Id == user.RoleId).ToList();

你不需要放入ViewBag:

var roles = db.Roles.Where(u => u.Id == user.RoleId).AsEnumerable();

 return View(roles);

在您的视图中将模型从用户更改为角色:

@model IEnumerable<HMS.Models.User>

Roles

@model IEnumerable<HMS.Models.Roles>

修改

您将在此LINE上返回一系列可用角色:if (usr != null) return View(ViewBag.role);不是用户。

如果要返回用户和角色,则必须在用户模型中包含角色。

控制器中有这样的东西:

var usr = db.Users.Find(user.Id);
usr.Roles = db.Roles.Where(u => u.Id == user.RoleId).ToList();

return View(usr);

然后在视图中:

@model HMS.Models.User

@foreach(var role in Model.Roles){

   <p>@role.RoleId</p>

}