0

я определил следующие маршруты, чтобы иметь дружественные адреса в моем RouteConfig.cs:ASP.NET MVC: параметр не передается во время URL маршрутизации

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
    name: "CreateChildRoute", 
    url: "Admin/MaterialPaymentRequestSbuItem/CreateChild/{parentId}", 
    defaults: new { controller = "MaterialPaymentRequestSbuItem", action = "CreateChild", parentId = UrlParameter.Optional } 
); 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new[] {"ProjectManager.Controllers"} 

); 

Однако, когда я называю: http://localhost:46813/Admin/MaterialPaymentRequestSbuItem/CreateChild/23 Нулевое значение передается контроллеру:

public ActionResult CreateChild(int? parentId){ 
    ..... 
} 

Но вызов http://localhost:46813/Admin/MaterialPaymentRequestSbuItem/CreateChild?parentId=32 работает без проблем и передает параметр, как он должен быть.

P.S. Admin - это определенная область в моем приложении. Вот вывод маршрута Debugger для http://localhost:46813/Admin/MaterialPaymentRequestSbuItem/CreateChild?parentId=2: enter image description here

+0

Код, который вы показали, отлично работает. Как вы генерируете URL-адреса? –

+0

@StephenMuecke Я сгенерировал выше URL-адреса вручную, чтобы протестировать приложение, однако есть ли другие методы тестирования? Я попробовал RedirectToAction и т. Д., Который будет создавать URL-адреса в этом шаблоне ('.../CreateChild? ParentId = 32') в качестве примера:' @ Html.ActionLink («Создать новый элемент», «CreateChild», новый {parentId = @ ViewBag.ParentID}, null) ' – VSB

+0

Это должно быть' @ Html.ActionLink («Создать новый элемент», «CreateChild», «MaterialPaymentRequestSbuItem», new {parentId = @ ViewBag.ParentID}, null) 'который будет работать нормально и генерировать' ..../Admin/MaterialPaymentRequestSbuItem/CreateChild/23'. Если это не так, то есть еще что-то еще, что вы не показали нам причинения проблемы. –

ответ

3

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

Вопреки тому, что говорит teo van kot, вы всегда хотите сначала начать с самых конкретных маршрутов, а более общие - последними, так как будет использоваться только первый маршрут.

Полезный инструмент, который я использовал для отладки моих маршрутов, - Route Debugger от Phil Haak. Он позволяет узнать, какой маршрут был выбран, и более полезно, какие параметры были сопоставлены, и может быть установлен через NuGet

+0

Я поставил вывод отладки маршрута, это вам поможет? – VSB

+1

У вас есть еще один маршрут, который соответствует до того, который вас интересует. Это маршрут по умолчанию для вашей области администратора,/Admin/{controller/{action/{id}. Если вы собираетесь использовать области, я предлагаю вам переместить маршрут из RouteConfig.cs в файл конфигурации для вашей области. Это будет в методе RegisterArea в файле Areas \ Admin \ AdminAreaRegistration.cs, в котором вы хотите, чтобы все ваши маршруты администратора вошли в систему. И снова он должен пройти до маршрута по умолчанию. – Mo09890

+0

Да, верно, у меня был маршрут по умолчанию для области в AdminAreaRegistration.cs' :) – VSB

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