实体框架显示从数据库到视图模型的项目列表

本文关键字:模型 项目 列表 视图 框架 显示 数据库 实体 | 更新日期: 2023-09-27 18:01:09

我正在使用实体框架将"角色"的多对多关系传递到我的控制器中。

在我的控制器中,我设置了:

    public ActionResult New()
    {
        var db = new MyContext();

        return View(new UsersNew
        {
            (from item in db.Roles
                     select item).Select(role => new RoleCheckbox
            {
                Id = role.Id,
                IsChecked = false,
                Name = role.Name
            }).ToList()
        });

我的Viewmodel包含2个类:

public class RoleCheckbox
{
    public int Id { get; set; }
    public bool IsChecked { get; set; }
    public string Name { get; set; }
}
public class UsersNew
{
    public IList<RoleCheckbox> Roles { get; set;}
    [Required, MaxLength(128)]
    public string Username { get; set; }
    [Required, DataType(DataType.Password)]
    public string Password { get; set; }
    [Required, MaxLength(128), DataType(DataType.EmailAddress)]
    public string Email { get; set; }
}

我的ViewModel:中有一个来自UsersNew类的强类型视图

        <ul class="list-group">
            @for (int i = 0; i < Model.Roles.Count; i++)
            {
                <li class="list-group-item">
                    @Html.Hidden("Roles[" + i + "].Id"), Model.Roles[i].Id)
                    <label for="Roles_@(i)__IsChecked">
                        @Html.CheckBox("Roles[" + i + "].IsChecked", Model.Roles[i].IsChecked)
                        @Model.Roles[i].Name
                    </label>
                </li>
            }
        </ul>

然而,在我的控制器中,我有一个错误:

"错误1无法使用集合初始值设定项初始化类型"myBlog.Areas.Admin.ViewModels.UsersNew",因为它未实现"System.Collections.Enumerable">

我也在我的控制器中尝试过:

        using (var db = new MyContext())
            var Roles = MyBlog.Roles.Select(role => new RoleCheckbox
            {
                Id = role.Id,
                IsChecked = false,
                Name = role.Name
            }).ToList();
            return View(new UsersNew { Roles });

我可能做错了,但我如何将角色列表从数据库传递到视图,以便在用户创建视图中显示角色"管理员"、"主持人"answers"用户"的复选框?

感谢

实体框架显示从数据库到视图模型的项目列表

语法为:

new ClassName { PropertyName = value }

所以我们有:

return View(new UserNew {
    Roles = (from item in db.Roles
             select item).Select(role => new RoleCheckbox {
                 Id = role.Id,
                 IsChecked = false,
                 Name = role.Name
             }).ToList()
});

您需要将您的角色声明为IEnumerable而不是IList

public IEnumerable<RoleCheckbox> Roles { get; set;}

您不能对IList进行迭代。请参阅实体上集合的IList与IEnumerable