ASP. Net MVC: Как настроить маршрут для действия с 2 параметрами? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть действия Get в моих контроллерах, которые имеют два параметра. Я вызываю их из представлений Razor, как это, используя JS функции:

function deleteAddress(addressId) {
    url = '@Url.Action("Delete", "Addresses",new { addressId = "3",actionRouteAfterActionFinish="SelectAddress"})';
    openLink(url);
}

А вот объявление моего действия внутри контроллера:

public async Task<ActionResult> Delete(int addressId,string actionRouteAfterActionFinish){
   ...
   ...
}

Когда я добавляю ниже Attribute route, он работает и оба параметра правильно передаются из вида Razor в Delete действие:

[Route("Addresses/Delete/{addressId}/{actionRouteAfterActionFinish}")]

Но когда я пытаюсь использовать ниже RouteConfig, оно не работает, и 2-й параметр устанавливается null, когда метод позвонить с точки зрения бритвы. Интересно, как мне переписать RouteConfig для управления действиями с двумя параметрами?

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//enabling attribute routing
routes.MapMvcAttributeRoutes();
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Intro", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "TwoParamterAction",
    url: "{controller}/{action}/{parameter1}/{paramter2}"
);

Я переставил Default правило с правилом TwoParamterAction, но это не помогло.

1 Ответ

1 голос
/ 04 мая 2020

Это потому, что имена аргументов не совпадают. Аргументы в URL-адресе маршрута могут иметь порядок, отличный от аргументов метода.

Из-за этого имена должны совпадать.

routes.MapRoute(
    name: "TwoParamterAction",
    url: "{controller}/{action}/{addressId}/{actionRouteAfterActionFinish}"
);

Это должно работать, так как имена совпадают.

...