Создаю свое первое приложение 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]
из действия казалось правильным решением.И фактически, как только я это сделал, маршрут был найден и действие выполнено.