Как лучше всего разместить контент по умолчанию в приложении MVC? - PullRequest
0 голосов
/ 03 марта 2009

Я работаю над своего рода приложением CMS / Wiki, чтобы помочь мне поэкспериментировать с новой средой Asp.Net MVC, и я пытаюсь обдумать некоторые аспекты организации кода.

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

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

MyPage myPage = null;

if (!string.IsNullOrEmpty(pageName)) {
    myPage = mRepository.GetMyPage(pageName);
}

//Page does not exist.
if (myPage != null) {
    ViewData["pageContent"] = myPage.GetParsedSource(new PageState());
    ViewData["pageSource"] = myPage.Source;
    ViewData["title"] = myPage.Title;
}
else {
    ViewData["title"] = pageName;
    ViewData["pageContent"] = "Page does not exist, feel free to create it!";
    ViewData["pageSource"] = "";
}

ViewData["pageName"] = pageName;

Мой вопрос: куда на самом деле должна идти эта логика?

1) Контроллер (как он есть сейчас), который требует репликации вышеуказанного кода между методами действия?
2) Модель, значения по умолчанию для pageSource для слов, показанных выше? Это будет иметь обратную сторону при перемещении отображаемого текста в модель.
3) Вид, использующий оператор объединения нулей для преобразования пустых записей ViewData в их значения по умолчанию?
4) В Views, но добавьте дополнительные контроллеры для обработки случаев, когда pageName не существует.


EDIT: Надеюсь, это должно прояснить ситуацию немного. Ход заявки выглядит следующим образом: Когда пользователь вводит URL-адрес (то есть / pages / page_title), он попадает на экран, на котором отображается содержание статьи, а также гиперссылки с пометкой «изменить» и «переименовать».

При нажатии на кнопку редактирования отображается страница, которая содержит содержание статьи, а также элементы управления формой для редактирования источника статьи.

При щелчке по переименованию отображается страница, которая содержит содержание статьи, а также элементы управления формой для редактирования названия статьи.

Ответы [ 2 ]

1 голос
/ 03 марта 2009

Я бы держал его в контроллере, но извлекал его, чтобы вам не приходилось копировать код в каждом из действий.

Может быть, установить некоторые значения по умолчанию в конструкторе контроллера, а затем иметь отдельный закрытый метод (т. Е. Не метод действия), который принимает ваш объект MyPage и задает данные представления, которые совместно используются вашими действиями.

1 голос
/ 03 марта 2009

У меня было бы несколько действий:

  • Поиск
  • Дисплей
  • Создать
  • Редактировать
  • Переименовать

В действии контроллера Lookup по умолчанию (которое срабатывает, когда пользователь запрашивает, скажем, «/ wiki / article-title»), вы можете при необходимости перенаправить (RedirectToAction()) на соответствующее действие. Это инкапсулирует вашу логику создания в свой собственный контроллер и может также вызываться напрямую (RESTful). То же самое с остальными. Это также позволяет вам сохранять ваши взгляды очень, очень глупыми (всегда хорошо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...