2016-03-08 4 views
1

У меня возникли проблемы с поиском наилучшего способа динамически определять мои иерархические маршруты.Динамические маршруты диспетчера ASP.NET MVC 5

Я ищу для достижения на основе баз данных ссылок, аналогичные приведенным ниже:

/Illinois/ 
/Illinois/Chicago/ 
/Illinois/Chicago/Id 
/California/ 
/California/Los-Angeles/ 
/California/Los-Angeles/Id 
/New-York/ 
/New-York/New-York-City/ 
/New-York/New-York-City/Id 

И так далее, я не хочу, чтобы определить контроллер для каждого состояния, но я не 100 % против, если это «правильный путь».

+0

В дополнении к вы также ожидаете, что такие маршруты, как '{controller}/{action}', например '/ Home/Index'? Потому что тогда вам нужно будет ударить по базе данных при разрешении маршрутов, чтобы знать, что «Главная» не является штатом в США, а «Индекс» не является городом. –

+0

Возможный дубликат [Несколько уровней в пользовательской маршрутизации MVC] (http://stackoverflow.com/questions/31934144/multiple-levels-in-mvc-custom-routing) – NightOwl888

+0

Указанные вами URL-адреса не будут работать самостоятельно, если вы в вашем приложении есть другой контроллер. Вам понадобится некоторый идентификационный префикс, такой как '/ Locations/Illinois','/Locations/California/Los-Angeles// etc и т. Д., А затем вам понадобится 'LocationsController' только с одним методом для обработки всего вышеперечисленного –

ответ

1

Вы можете создать контроллер как HomeController и использование маршрута атрибутов на верхнюю часть этого контроллера и связанные с ними действия, чтобы скрыть маршрут URL и называют свои места и идентификаторы в маршруте, как это:

[RoutePrefix("")] 
public class HomeController : Controller 
{ 
    Route("{state?}/{city?}/{id?}") 
    public ActionResult Index(string state, string city, int id) 
    { 
     //your codes 
     return View(); 
    } 
} 
+0

Спасибо, что отлично работали – Stephen

+0

check true для answare – Mostafa

+0

Похоже, я, возможно, подпрыгнул с пистолета на этом. У меня проблемы с традиционными маршрутами для работы, используя вышеизложенное. Есть ли способ для меня иметь список приемлемых состояний? Я бы предпочел не перечислить их все, но я могу для государственных и городских звонков. Или, есть ли способ, чтобы я что-то исключил? В этом случае я отправляю сообщение «/ Lead», но он ищет лидерство в базе данных. В противном случае я получаю сообщение об ошибке «Было найдено несколько типов контроллеров, которые соответствуют URL-адресу» – Stephen

Смежные вопросы