在一个视图中使用多个模型对象引用未设置为对象的实例

时间:2015-11-24 17:39:25

标签: asp.net-mvc asp.net-mvc-5

我正在尝试按照一些有关如何执行此操作的教程,但我没有结果。

我必须在我的视图中使用两个模型,并且它们都从数据库中检索数据,但是当我尝试将它们组合到一个视图中时,它表示我得到了一个空结果。如何从数据库中查询并将两个模型返回到视图?

User.cs

public class User
{
    [Key]
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string UserPassword { get; set; }
}

Course.cs

public class Course
{
    [Key]
    public int CourseID { get; set; }
    public string CourseName { get; set; }
    public string CourseDescription { get; set; }
}

CommonViewModel

public class CommonViewModel
{
    public List<User> users { get; set; }
    public List<Course> courses { get; set; }
}

DefaultConnection.cs

    public class DefaultConnection : DbContext
    {
        public DefaultConnection() : base("DefaultConnection") { }

        public DbSet<User> Users { get; set; }
        public DbSet<Course> Vehicles { get; set; }
    }

查看

@model TEST.Models.CommonViewModel

@foreach (var item in Model.users)
{
    @Html.DisplayFor(modelItem => item.UserID)
}

的HomeController

private DefaultConnection db = new DefaultConnection();

       public ActionResult Index()
        {
            List<User> users = new List<User>();

            List<Course> courses = new List<Course>();

            var viewModel = new CommonViewModel();
            viewModel.users = users;
            viewModel.courses = courses;

            return View(viewModel);
        }

2 个答案:

答案 0 :(得分:1)

我认为您尚未正确初始化CommonViewModel。以下代码片段可以帮助您。

 public class HomeController
 {
    private DefaultConnection db = new DefaultConnection();

    public ActionResult Index()
    {
        var viewModel = new CommonViewModel();
        viewModel.users = db.User.ToList();
        viewModel.courses = db.Course.ToList();

        return View(viewModel);
    }        
}

请参阅this dotnetfiddle。希望这会对你有所帮助。

https://dotnetfiddle.net/aqkE8v

答案 1 :(得分:0)

您的模型应包含用户的定义;它包含名为user的属性。

public class CommonViewModel
{
    public List<User> Users {get ; set; }
    public List<Course> courses {get ; set; }
}

或者,您应该从Action返回List。在这种情况下,你应该改变为

@model List<TEST.Models.CommonViewModel>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.User.UserID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.User.UserName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.User.UserPassword)
        </td>
    </tr>
}