0

Я разрабатываю приложение ASP.NET MVC, где содержимое для любой страницы можно вытащить из базы данных, если оно существует, и отображается на странице.Разве хорошая идея поставить логику доступа к контенту в BaseController?

Это делается для того, чтобы нетехнические лица могли редактировать контент без необходимости входить в исходный код (например, виды) и изменять вещи.

Как я это делаю, каждый контроллер происходит от базового контроллера. Базовый контроллер перегружает «OnActionExecuted» и использует эту возможность, чтобы вытащить любой контент, назначенный текущему Action/Controller.

Если действие возвращает ViewModel, которое происходит из 'ContentViewModel', оно заполняет свойство Text для ViewModel текстом из базы данных.

А затем текст визуализируется в представлении.

У вас есть недостаток в этом дизайне?

Было бы лучше, если бы вместо базового контроллера у меня были расширения HtmlHelper для вытягивания контента, который я вызываю из представления?

Одна из причин, по которой я прошу об этом, заключается в том, что мой собственный базовый контроллер мешает вызвать «Html.RenderAction», который, похоже, ожидает, что указанный контроллер будет непосредственно наследоваться от «System.Web.Mvc.Controller».

ответ

1
  1. ActionFilters не должны использоваться для вытягивания содержимого.

  2. Контроллеры не должны использоваться для вытягивания содержимого, а только для отправки входящих запросов, применяя простую логику.

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

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

Это в основном, как большинство приложений работают.

Это делается для того, чтобы нетехнические лица могли редактировать контент без необходимости входить в исходный код (например, виды) и изменять вещи.

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

Я предлагаю вам не сделать ничего странного, но все будет ясно. Внедрите свой бизнес-уровень, который будет предоставлять данные для моделей, которые будет отображать представление. Создайте пользовательский интерфейс для других людей, чтобы редактировать контент.