开发者

ASP.net MVC displaying results from two tables on one view

I'm crating a simple MVC app that has People and Notes tables.

Using the repository method and LINQ to SQL to access the data.

Each person has a single note for a day and the note has a CreatedAt. Foreign Key in Note table as PersonID.

I have managed to get CRUD working for both Person and Note independently but I'd like to be able to display the note of a single person for a single day in my view.

In my repository I've created a helper which I think should work, but I'm not sure how I'd use it in my controller.

public IQueryable<Note> FindSinglePersonsNote(int id)
{
    return from Note in db.Notes
           where Note.CreatedAt > DateTime.Now.AddDays(-1)
           && Note.PersonId == id
           select Note;
}

What I'd like to happen is when I click on the person details link, to show the Persons name and the note connected to that person for today.

Any help would be appreciated.

Cheers

Tom

Update:

I think I'm getting close...

My Person controller 开发者_JS百科now looks like this

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

    };

    return View(personNote);
}

And I created a new view called PersonNote

And tried to access the values like so:

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

And my repo looks like this:

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

But I'm getting a very strange error when I try to view the page.

The parameters dictionary contains a null entry for parameter 'personId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ViewResult PersonNote(Int32)' in 'ScrumApp.Controllers.PersonController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters


Create a ViewModel object that looks something like this:

public class PersonNoteViewModel
{
    public Person person { get; set; }
    public Note note { get; set; }
}

Populate an instance of this object in your controller method using your repository, and then pass this object to your view for display:

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

    return View(personNote);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜