2017-02-06 6 views
0

У меня есть страница MVC для создания объекта. По завершении я хочу перенаправить на родительский объект. Я делаю это так:Сделать ASP.NET MVC параметром маршрута с именем `` id '', как и любой другой параметр

return RedirectToAction("Edit", new { id = vm.Parent }); 

Когда я использую любое другое имя параметра, оно интерпретируется как URL PARAM:

return RedirectToAction("Edit", new { foo = vm.Parent }); 

делает, как /Entities/Edit?foo=234

Но ASP MVC улавливает маршрут param назван id как особый случай, и URL выглядит так: /Entities/Edit/234. Это не работает для меня, потому что маршрутизация не настроена для работы с этим. Я ищу, чтобы получить URL-адрес, как /Entities/Edit?id=234.

Как заставить его работать таким образом? Настройка маршрута:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+3

В конфигурации вашего маршрута найдите сопоставленный маршрут, который выглядит следующим образом: '{{control}/{ action}/{id} "' и добавьте детали к вашему вопросу. – spender

+1

Используете ли вы маршруты по умолчанию? –

+0

Добавлена ​​настройка маршрута @spender – Johanes

ответ

0

Судя по всему, вы используете только конфигурационный маршрут по умолчанию маршрута, который только указанный id как определенный UrlParameter. Если вы хотите пользовательский параметр, то вам нужно определить его как таковой:

routes.MapRoute(
    name: "ControllerName", 
    url: "controllername/edit/{foo}" 
); 

Или, если вы хотите использовать foo вместо id глобально, просто изменить существующий маршрут:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{foo}", 
    defaults: new { controller = "Home", action = "Index", foo = UrlParameter.Optional } 
); 

Или, если вам не нужны хорошие URL-адреса с ненужным параметром строки запроса, измените свое значение по умолчанию:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}", 
    defaults: new { controller = "Home", action = "Index" } 
);