Linq to sql ASP.net MVC在一个视图上显示两个表的结果

Linq to sql ASP.net MVC在一个视图上显示两个表的结果,linq-to-sql,asp.net-mvc-2,Linq To Sql,Asp.net Mvc 2,我正在制作一个简单的MVC应用程序,其中包含人物和笔记表 使用repository方法和linqtosql访问数据 每个人一天有一张便条,便条上有一个CreatedAt。注释表中的外键为PersonID 我已经设法让CRUD为Person和Note独立工作,但我希望能够在我的视图中显示一个人一天的Note 在我的存储库中,我创建了一个助手,我认为它应该可以工作,但我不确定如何在我的控制器中使用它 public IQueryable<Note> FindSinglePersonsNot

我正在制作一个简单的MVC应用程序,其中包含人物和笔记表

使用repository方法和linqtosql访问数据

每个人一天有一张便条,便条上有一个CreatedAt。注释表中的外键为PersonID

我已经设法让CRUD为Person和Note独立工作,但我希望能够在我的视图中显示一个人一天的Note

在我的存储库中,我创建了一个助手,我认为它应该可以工作,但我不确定如何在我的控制器中使用它

public IQueryable<Note> FindSinglePersonsNote(int id)
{
    return from Note in db.Notes
           where Note.CreatedAt > DateTime.Now.AddDays(-1)
           && Note.PersonId == id
           select Note;
}
我创建了一个名为PersonNote的新视图

并尝试访问如下值:

<%= Model.person.PersonName %>
<%= Model.note.Issues %>
但是当我试图查看页面时,我遇到了一个非常奇怪的错误

参数字典包含“ScrumApp.Controllers.PersonController”中方法“System.Web.Mvc.ViewResult PersonNote(Int32)”的不可为空类型“System.Int32”的参数“personId”的空条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。
参数名称:参数创建一个如下所示的ViewModel对象:

    public Note GetNote(int id)
    {
        return db.Notes.SingleOrDefault(d => d.PersonId == id);
    }


    public Person GetPerson(int id)
    {
        return db.Persons.SingleOrDefault(d => d.PersonId == id);
    }
public class PersonNoteViewModel
{
    public Person person { get; set; }
    public Note note { get; set; }
}
使用存储库在控制器方法中填充此对象的实例,然后将此对象传递到视图以供显示:

public ViewResult PersonNote(int id)
{
    var personNote = new PersonNoteViewModel
    {
        Person = repository.GetPerson(id);
        Note = repository.GetNote(<blah>);
    }

    return View(personNote);
}
public ViewResult PersonNote(int-id)
{
var personNote=新的PersonNoteViewModel
{
Person=repository.GetPerson(id);
Note=repository.GetNote();
}
返回视图(personNote);
}

谢谢您的回答。我有一种感觉,这将归结为viewmodels。我已经创建了该视图模型,但我不确定如何将其实例放入控制器方法中,然后将对象传递给视图。我假设是这样的:var viewmodel=newpersonnoteviewmodel{person=newperson(),note=newnote()};但我不确定下一步该怎么做,也不确定如何实例化它。再次感谢罗伯特!我觉得我快到了。我更新了我原来的问题,以反映现在发生的事情。Tom该错误意味着您没有在URL的某个位置指定personID,或者路由没有选择personID参数。确保你检查过了;它包含这些东西的原型代码。指定了personId,但它不喜欢控制器中使用的(personId)。我把它换成了(身份证),事情就好了。它现在显示一个人的名字和他们的便条(只要我的数据库中每个personId只有一条便条。非常感谢你的帮助!这是为了明天的演示。你是一个救生员!欢迎你。我编辑了我的答案以便更好地跟踪id。仅供参考:id有效,因为它在你的默认路线中。
public ViewResult PersonNote(int id)
{
    var personNote = new PersonNoteViewModel
    {
        Person = repository.GetPerson(id);
        Note = repository.GetNote(<blah>);
    }

    return View(personNote);
}