У меня есть что-то вроде структуры, которую вы описываете на сайте MVC, над которым я сейчас работаю. Я не нашел действительно удовлетворительного ответа - во многих случаях кажется, что вам нужны две разные модели: одна для главной страницы и одна для страниц с контентом. К сожалению, это не так, как работает MVC.
Я встречал только одно решение, кроме упомянутой вами опции ViewData.
Базовый класс
- Создайте базовый класс, который наследуют все ваши модели.
- Базовый класс содержит все свойства, которые вам нужны на главной странице.
- Хорошо: это простое наследство
- Плохо: в итоге вы получаете методы / модели-обёртки для таких базовых вещей, как передача перечисляемой коллекции.
Так что в вашем случае вы бы получили что-то вроде ...
public class MasterPageViewModel {
public string Meta { get; set; }
}
public class Entry : MasterPageViewModel {
public IEnumerable<bl.Models.EntryItem> Items {get; set }
}
public class EntryItem{
public int EntryID { get; set; }
public string Title { get; set; }
public DateTime PubDate { get; set; }
}
И ваша индексная страница будет выглядеть так ...
...Inherits="System.Web.Mvc.ViewPage<bl.Models.Entry>"
Это что-то вроде боли в заднице, потому что у тебя много маленьких моделей. Однако, как только я к этому привык, я перестал думать об этом.
НТН,
-Эрик