asp.net mvc2 - контроллер для основной страницы и организации кода

Я только что закончил свой первый 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. Так, мой вопрос: что лучший способ состоит в том, чтобы передать эти данные с Модели на Контроллер и наконец просматривать страницы?

  1. Если я делаю контроллер для основной страницы и класса ViewModel, который перенесет все это классы вместе ИЛИ
  2. Я должен создать частичные Представления для каждого из этих полей и заставить каждого из них наследовать соответствующий класс (если даже возможно, что он прокладывает себе путь?) ИЛИ
  3. Если я поместил этот повторный код во все контроллеры и всю дополнительную передачу данных через ViewData, который будет, вероятно, худшим путем :) ИЛИ
  4. Существует, возможно, лучший и более простой путь, но я не знаю/вижу это?


Заранее спасибо, Ile



Править:
Если Ваш ответ является № 1, то объясните, как сделать контроллер для основной страницы!

РЕДАКТИРОВАНИЕ 2:
В этом учебном руководстве описан, как передать данные основной странице с помощью абстрактного класса: http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx
В "Списке 5 – Controllers\MoviesController.cs", данные получены непосредственно от базы данных с помощью LINQ, не из репозитория. Так, интересно, находится ли это только в этом учебном руководстве, или существует некоторый прием здесь, и репозиторий не может использоваться?

5
задан ilija veselica 2 April 2010 в 19:52
поделиться

2 ответа

Чтобы получить данные на мою главную страницу:

  • Мне не нравится использовать абстрактный класс для передачи данных на главную страницу. Я предпочитаю композицию наследованию.
  • Мне не нравится использовать словарь ViewData, потому что он не строго типизирован.

Я бы создал представления, модели представления и действия для каждого раздела. Затем вызовите 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 (разделение проблем).

4
ответ дан 14 December 2019 в 13:32
поделиться

Я тоже боролся с этим. Первоначально я делал много сброса дополнительных данных в ViewData, которые в конечном итоге приходилось отбрасывать обратно (сделал несколько расширений, которые облегчили это, но все еще не очень хорошо).

Я бы пошел по вашему выбору №1 и создал ViewModel, который объединяет все классы, которые вам понадобятся.

2
ответ дан 14 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: