Я только что закончил свой первый ASP.NET MVC (2) CMS. Следующий шаг должен создать веб-сайт, который покажет данные из базы данных CMS. Это - дизайн веб-сайта:
http://img56.imageshack.us/img56/4676/portal.gif http://img56.imageshack.us/img56/4676/portal.gif
1. (Красное поле) - отображает категории статьи. ViewModel:
public class CategoriesDisplay
{
public CategoriesDisplay() { }
public int CategoryID { set; get; }
public string CategoryTitle { set; get; }
}
2. (Поле Brown) - дисплеи служат x статьи; пропуски пропуски от зеленого поля № 3. Viewmodel:
public class ArticleDisplay
{
public ArticleDisplay() { }
public int CategoryID { set; get; }
public string CategoryTitle { set; get; }
public int ArticleID { set; get; }
public string ArticleTitle { set; get; }
public string URLArticleTitle { set; get; }
public DateTime ArticleDate;
public string ArticleContent { set; get; }
}
3. (Зеленое поле) - Дисплеи служат x статьи. Использует тот же ViewModel в качестве коричневого поля № 2
4. (Синее поле) - список Дисплеев предстоящих событий. Использование dataContext.Model.Event
как ViewModel
Поля № 1, № 2 и № 4 повторятся на всем протяжении сайта, и они - часть Ведущего устройства Page. Так, мой вопрос: что лучший способ состоит в том, чтобы передать эти данные с Модели на Контроллер и наконец просматривать страницы?
Заранее спасибо, Ile
Править:
Если Ваш ответ является № 1, то объясните, как сделать контроллер для основной страницы!
РЕДАКТИРОВАНИЕ 2:
В этом учебном руководстве описан, как передать данные основной странице с помощью абстрактного класса: http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx
В "Списке 5 – Controllers\MoviesController.cs", данные получены непосредственно от базы данных с помощью LINQ, не из репозитория. Так, интересно, находится ли это только в этом учебном руководстве, или существует некоторый прием здесь, и репозиторий не может использоваться?
Чтобы получить данные на мою главную страницу:
Я бы создал представления, модели представления и действия для каждого раздела. Затем вызовите Html.RenderAction (...)
Например:
Я бы создал CategoriesDisplay.aspx
только с html для красного ящика. Я бы передал вашу модель CategoriesDisplay
. Затем в моем контроллере:
public class CategoryController : Controller
{
public ActionResult DisplayCategories()
{
var model = new CategoriesDisplay();
...
return View(model);
}
}
Затем на моей главной странице:
<% Html.RenderAction<CategoryController>(c => c.DisplayCategoreis()); %>
Это отобразит представление CategoriesDisplay встроенным в главную страницу. Что, в свою очередь, позволяет иметь чистый и управляемый код SOC (разделение проблем).
Я тоже боролся с этим. Первоначально я делал много сброса дополнительных данных в ViewData, которые в конечном итоге приходилось отбрасывать обратно (сделал несколько расширений, которые облегчили это, но все еще не очень хорошо).
Я бы пошел по вашему выбору №1 и создал ViewModel, который объединяет все классы, которые вам понадобятся.