Как отправить два списка в качестве модели в MVC - PullRequest
4 голосов
/ 27 января 2011

Я делаю небольшое тестовое приложение ASP.NET MVC 3 с книжной полкой, где я могу перечислить «Книги», взять взаймы и вернуть их в / из «Ссуды».

Я хочу показать и мои Книги, и мои Заемщики в одном представлении, и поэтому создал ViewModel с именем BooksViewModel, но не могу понять, почему я не могу перечислить свои «Книги». Я могу сделать «foreach (var item in Model)» и только нажать «Книги» внутри него, ни одно из свойств Книги.

Моя модель

namespace MyTest.Models
{
    /// <summary>
    /// Represents a book
    /// </summary>
    public class Book
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public string ISBN { get; set; }
        public virtual Loaner LoanedTo { get; set; }
    }

    /// <summary>
    /// Represents a Loaner
    /// </summary>
    public class Loaner
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Book> Loans { get; set; }
    }

    /// <summary>
    /// Bookshelf Database Context
    /// </summary>
    public class BookshelfDb : DbContext
    {
        public DbSet<Book> Books { get; set; }
        public DbSet<Loaner> Loaner { get; set; }
    }     
}

Мой контроллер:

    BookshelfDb bookshelf = new BookshelfDb();

    public ActionResult Index()
    {
        var books = from book in bookshelf.Books
                        select book;

        var loaners = from loaner in bookshelf.Loaner
                         select loaner;

        var bookViewModel = new BooksViewModel(books.ToList(),loaners.ToList());

        return View(bookViewModel);
    }

Моя ViewModel

public class BooksViewModel
{
    public BooksViewModel(List<Book> books, List<Loaner> loaners)
    {
        this.Books = books;
        this.Loaners = loaners;
    }
    public List<Book> Books { get; private set; }
    public List<Loaner> Loaners { get; private set; }
}

My View

@model IEnumerable<MyTest.ViewModels.BooksViewModel>
@foreach (var item in Model.Books)
{
    @item.Title
}

Будем очень благодарны за любые подсказки или исправления кода!

1 Ответ

5 голосов
/ 27 января 2011

Похоже, вы неправильно указали тип модели в объявлении представления. Попробуйте:

@model MyTest.ViewModels.BooksViewModel

@foreach (var item in Model.Books)
{    
   @item.Title
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...