ActionLink 404 Ошибка - PullRequest
       4

ActionLink 404 Ошибка

5 голосов
/ 22 августа 2011

Создаю свое первое приложение ASP.NET MVC 3 и пытаюсь реализовать возможность отсоединения данного мороженого от меню.С каждым из них связан целочисленный идентификатор, и на странице я отображаю эти сопоставления и предоставляю им ссылку для удаления мороженого из меню.

У меня есть ActionLink, который выглядит следующим образом:

@Html.ActionLink("Remove", "RemoveMenuIceCreamMapping", "IceCream", new { iceCreamId=item.IceCreamId, menuId=item.MenuId}, null)

В моем IceCreamController у меня есть действие, которое выглядит следующим образом:

[HttpPost]
public PartialViewResult RemoveMenuIceCreamMapping(int iceCreamId, int menuId)
{
   ...
}

Сделал небольшой поиск и считаю, что мне может понадобиться изменитьroutes в файле Global.asax.cs RegisterRoutes для обработки этих двух параметров.Итак, я попробовал это так:

public static void RegisterRoutes(RoutesCollection routes)
{
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

   // I added this route in an attempt to handle the two parameters:
   routes.MapRoute(
      "RemoveMenuIceCreamMapping", // Route name
      "IceCream/RemoveMenuIceCreamMapping/{iceCreamId}/{menuId}", // URLwith parameters
      new
      {
         controller = "IceCream",
         action = "RemoveMenuIceCreamMapping",
         iceCreamId = UrlParameter.Optional,
         menuId = UrlParameter.Optional
      } 
   );

   // this was there by default
   routes.MapRoute(
      "Default",
      "{controller}/{action}/{id}",
      new {controller = "Home", action = "Index", id = UrlParameter.Optional }
   };
}

Но это не работает - я получаю «Ресурс не найден».ошибка, 404. Запрошенный URL: / IceCream / RemoveMenuIceCreamMapping / 1/10

1 - это идентификатор IceCream, а 10 - это идентификатор меню.

Я ожидал, чтоaction RemoveMenuIceCreamMapping будет вызван, передав эти два параметра, но я, очевидно, не делаю что-то прямо здесь и могу просто неправильно понять, как выполнить то, что я хочу, и поступить так неправильно.Любое руководство будет наиболее ценно.


Обновление

Итак, еще одна вещь, которую я узнал, прочитав этот вопрос SO мой ActionLink не вызывает POST, поэтому удаление [HttpPost] из действия казалось правильным решением.И фактически, как только я это сделал, маршрут был найден и действие выполнено.

1 Ответ

6 голосов
/ 22 августа 2011

Я думаю, что ваша проблема в том, что ActionLink использует HTTP GET, а вы принимаете только HTTP POST.

Возможно, вам потребуется изменить свое представление, чтобы выдать HTTP POST (например, с помощью обычной кнопки HTML внутри формы), чтобы глагол, отправляемый браузером, совпадал с тем, что вы принимаете на контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...