如何在ASP.NET MVC3中创建此模型?

时间:2011-05-07 15:22:27

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

我对ASP.NET MVC很陌生,事实上这是我第一次使用它。我想构建简单的TaskList。我在ASP.NET中相当不错,但对ASP.NET MVC或Linq几乎一无所知,所以在回答时请记住这一点。

我正在使用CodeFirst Entity Frameword来生成Db。

我有两个表Users(id,name)和Tasks(id,userid,name)。我创建了两个包含Users和Tasks属性的Model对象。因此,不要将int userID作为数据库设计,而是建议我在Task类中有一个User类来将Task连接到某个User。

不知何故,我设法使用LINQ创建联接

   var model = from t in _db.Tasks
                join u in _db.Users on t.User.ID equals u.ID
                select new { UserID = u.ID,UserName = u.Name,t.Name,t.ID };
    return View(model);

但我无法将其绑定到视图,我将其绑定到任务模型,这可能会导致此错误。

我如何解决这个问题,也许我需要创建某种类型的ViewModel或类似的东西?

...谢谢

2 个答案:

答案 0 :(得分:1)

您的Linq查询使用所谓的延迟执行。这意味着查询本身不包含任何记录,您必须对其执行某些操作才能使其执行。

所以试试这个:

return View(model.ToList());

答案 1 :(得分:1)

您应该创建一个ViewModel并将其传递给您的视图:

public class TaskViewModel
{
    public int TaskId { get; set; }
    public string TaskName { get; set; }
    public int UserId { get; set; }
    public int Username { get; set; }
}

创建一个强类型视图:

@model IEnumerable<YourNamespace.Models.TaskViewModel>
//Display model data

和Linq查询:

var model = from t in _db.Tasks
            join u in _db.Users on t.User.ID equals u.ID
            select new TaskViewModel
            {
                TaskId = t.ID,                    
                TaskName = t.Name,
                UserId = u.ID,
                Username = u.Name
            };
相关问题