Вопрос

Я думаю, у меня есть сложный URL-адрес, с которым нужно иметь дело в ASP MVC 1.0:Все мои действия в большинстве контроллеров постоянно требуют двух параметров:Аккаунт и проект.Это сверх требований каждого действия.Это означает, что типичный URL-адрес выглядит следующим образом:

http://abcd.com/myaccount/projects/project_id/sites/edit/12

В этом примере:мой счет это имя учетной записи. проекты может быть контроллером, другие варианты похожи локации, сотрудники. идентификатор_проекта это идентификатор проекта внутри мой счет, места может быть контроллером, другие варианты похожи персонал или платежи. редактировать это действие и 12 это идентификатор редактируемого сайта.(надеюсь, это достаточно ясно)

Теперь один из вариантов — создать маршрут и передать project_id и учетную запись во все действия контроллеров, добавив ко всем действиям два дополнительных параметра.Это не совсем желательно, и я не уверен, что два контроллера (проекты и сайты) будут здесь работать.

Моя идеальная ситуация — использовать какой-то контекст, который передается вместе с вызовом действия контроллера, и хранить там project_id и myaccount.С остальными параметрами можно работать обычным способом, например:

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

Есть идеи, как/где это может произойти?И как это будет работать с ActionLink (т.создание правильных ссылок на основе этого контекста)?

Спасибо!

Это было полезно?

Решение

Сначала вам нужно добавить токены в свои маршруты, например {company}/projects/{project}{controller}/{action}/{id}.Тогда, если вы написали свою собственную IControllerFactory, было бы очень легко передать значения из RouteData в контроллер через конструктор или как вы хотите это сделать.Вероятно, самый простой способ начать — создать подкласс DefaultControllerFactory и переопределить метод CreateController.

Другие советы

Для меня это не совсем имеет смысла.Зачем вам маршрут, похожий на следующий:

{controller}/{id}/{controller}/{id}

?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top