Отправка параметра в контроллер в ASP MVC 2 - PullRequest
4 голосов
/ 27 сентября 2011

Я пишу область для администрирования нескольких дочерних сайтов, почти все функции будут одинаковыми для каждого сайта (добавление / редактирование / удаление страниц и т. Д.), И мой репозиторий при создании экземпляра принимает SiteIdentity, поэтому все методы доступа к данным являются независимымипо отношению к этому.Проблема, с которой я столкнулся на данный момент, заключается в том, чтобы сделать мои методы действий также независимыми.

Шаблон URL, который я хочу использовать, выглядит следующим образом:

"ExternalSite/{identity}/{controller}/{action}/{id}"

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

Каков наилучший способ сделать это?В настоящее время лучшее, что я могу придумать, это попытаться найти и привести личность из словаря RouteData, но часть меня считает, что должно быть более элегантное решение.

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Звучит так, как будто вы хотите использовать OnActionExecuting или Custom ModelBinder для выполнения этой логики каждый раз, когда у вас есть определенное имя параметра (также известное как ключ словаря RouteData).

  1. Создание пользовательского связывателя моделей в ASP.NET MVC
  2. Создание метода OnActionExecuting в ASP.NET MVC , Выполнение отслеживания на стороне сервера в ASP.NET MVC
1 голос
/ 27 сентября 2011

У вас есть доступ к значениям вашего маршрута в Request.RequestContext.RouteData, так что вы можете сделать базовый контроллер и открытое свойство SiteIdentity, в этом случае вы можете получить к нему доступ из всех действий всех унаследованных контроллеров.

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