2010-07-22 78 views
2

我正在创建一个具有People和Notes表的简单MVC应用程序。ASP.net MVC在一个视图中显示来自两个表的结果

使用存储库方法和LINQ to SQL来访问数据。

每个人都有一个单一的笔记一天,该笔记有一个CreatedAt。注释表中的外键为PersonID。

我已经设法使得CRUD能够为Person和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; 
} 

我想什么发生的是,当我点击详情链接的人,展现人的姓名和联系到此人今天的说明。

任何帮助,将不胜感激。

干杯

汤姆

更新:

我觉得我越来越近......

我一个人控制器现在看起来像这样

public ViewResult PersonNote(int personId) 
{ 
    var personNote = new PersonNoteViewModel 
    { 
     person = scrumRepository.GetPerson(personId), 
     note = scrumRepository.GetNote(personId) 

    }; 

    return View(personNote); 
} 

我创造了一个新的观点所谓PersonNote

并试图访问值,像这样:

<%= Model.person.PersonName %> 
<%= Model.note.Issues %> 

我的回购协议是这样的:

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); 
    } 

但我发现了一个很奇怪的错误,当我尝试查看这一页。

参数字典中包含'ScramApp.Controllers.PersonController'中方法'System.Web.Mvc.ViewResult PersonNote(Int32)'的非空类型'System.Int32'的参数'personId'的空项。可选参数必须是引用类型,可为空类型,或者声明为可选参数。 参数名:参数

+0

此错误表示您没有在URL中指定personID,或者路由没有选取personID参数。确保你看看[NerdDinner教程](http://nerddinnerbook.s3.amazonaws.com/Intro.htm);它包含这些东西的原型代码。 – 2010-07-22 21:25:46

+0

指定了personId,但它不喜欢我的控制器中使用的(personID)。 我把它切换到(id),事情变得更好。 它现在显示一个人名和他们的笔记(只要我每个人只有一个笔记就在我的数据库中) 非常感谢你的帮助,明天你会成为一名救生员! – 2010-07-22 21:34:22

+0

您的欢迎,我编辑了我的回答,以更好地跟踪id。* FYI:* id的工作原理是因为它在您的*默认*路线中 – 2010-07-22 21:38:09

回答

4

创建一个视图模型对象,它看起来是这样的:

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); 
} 
+0

感谢您的回答,我感觉它会归结为viewmodels。 我已经创建了一个视图模型,但我不能确定如何把它的一个实例在控制器方法,然后将对象传递给视图 我相信这件事情是这样的: VAR视图模型=新PersonNoteViewModel { person = new Person(), note = new Note() }; 但我不确定接下来要做什么或者如何实例化它。 – 2010-07-22 20:18:04

+0

@Toggo:我添加了一个额外的代码示例。 – 2010-07-22 20:34:11

+0

再次感谢罗伯特! 我觉得我快到了。我已经更新了我的原始问题,以反映现在发生的情况。 Tom – 2010-07-22 21:13:23

相关问题