2010-07-22 114 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

相關問題