MVC - Как я могу подключиться к действию контроллера, чтобы изменить представление, прежде чем оно будет возвращено в браузер? - PullRequest
2 голосов
/ 17 июня 2011

Я немного новичок в MVC, поэтому прошу прощения, если я спрашиваю что-то странное здесь. По сути, я пытаюсь изменить существующее приложение MVC для электронной коммерции, но подключаемым способом. Это означает, что я не хочу касаться существующего кода, а скорее ссылаюсь на соответствующие сборки приложения и использую все точки расширения в приложении.

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

Единственный способ, которым я мог придумать, это переключиться на маршрут для представления и написать свой собственный контроллер и действие. И в своем действии я могу вызвать оригинальный контроллер и действие, чтобы получить ViewResult и манипулировать им, прежде чем вернуть его в ViewEngine. На первый взгляд это кажется мне неправильным, и, кроме того, я не уверен, могу ли я вызвать действие другого контроллера из действия моего контроллера.

Итак, мне было интересно, существует ли вообще с точки зрения MVC способ подключения к CategoryView контроллеру, модели или действию для изменения данных, отображаемых в представлении? Я говорю с точки зрения MVC, потому что в противном случае в приложении нет предопределенных пользовательских точек расширения для этого.

Пожалуйста, сообщите.

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Вы можете сделать это через ActionFilter или в вашем контроллере вы можете вызвать RenderView () и затем изменить результат.

См .: Использование Action Filter с представлением

1 голос
/ 26 июня 2011

Взгляните на ActionFilterAttribute .Это позволяет подключиться к выполнению кода непосредственно перед или после вызова действия, а также непосредственно перед и после выполнения ActionResult, возвращенного действием.

Каждый из методов этого класса получает объект контекста.Объект контекста имеет свойство Result, которым вы можете манипулировать.

...