ASP.net MVC отображает результаты из двух таблиц в одном представлении - PullRequest
2 голосов
/ 22 июля 2010

Я пишу простое приложение MVC с таблицами People и Notes.

Использование метода хранилища и LINQ to SQL для доступа к данным.

У каждого человека есть отдельная заметка длядень, и примечание имеет CreatedAt.Внешний ключ в таблице заметок как PersonID.

Мне удалось заставить CRUD работать независимо для Персоны и Заметки, но я хотел бы иметь возможность отображать заметку одного человека за один день на мой взгляд.

В моем репозитории я создал помощника, который, я думаю, должен работать, но я не уверен, как бы использовать его в своем контроллере.

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

Что я 'Я бы хотел, чтобы это произошло, когда я нажму на ссылку с информацией о человеке, чтобы показать имя человека и заметку, связанную с этим человеком на сегодня.

Любая помощь будет принята.

Приветствия

Том

Обновление:

Мне кажется, я уже близко ...

Мой контроллер Person теперь выглядит так

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

Но я получаю очень странную ошибку при попытке просмотреть страницу.

Словарь параметроввставляет пустую запись для параметра 'personId' ненулевого типа 'System.Int32' для метода 'System.Web.Mvc.ViewResult PersonNote (Int32)' в 'ScrumApp.Controllers.PersonController'.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

1 Ответ

4 голосов
/ 22 июля 2010

Создайте объект ViewModel, который выглядит примерно так:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...