ActionLink 404错误

its*_*att 5 asp.net asp.net-mvc asp.net-mvc-3

构建我的第一个ASP.NET MVC 3应用程序并尝试实现从菜单中取消给定冰淇淋的能力.每个都有一个与之关联的整数标识符,在页面上我显示这些映射并提供一个链接,以便从菜单中删除冰淇淋.

我有一个ActionLink看起来像这样:

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

在我的IceCreamController中,我有一个看起来像这样的Action:

[HttpPost]
public PartialViewResult RemoveMenuIceCreamMapping(int iceCreamId, int menuId)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

做了一点搜索并相信我可能需要修改routesGlobal.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 }
   };
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - 我得到了"资源无法找到".错误,404.请求的URL:/ IceCream/RemoveMenuIceCreamMapping/1/10

1是IceCream的Id,10是菜单的Id.

我期待发生的事情是动作RemoveMenuIceCreamMapping将被调用,传递这两个参数,但我显然没有在这里做某事,可能只是误解了如何完成我想要的事情并以错误的方式去做.任何指导都将非常感激.


更新

所以,在我阅读了这个问题后,我还学到了另一件事,我ActionLink没有触发POST,所以[HttpPost]从行动中删除似乎是正确的事情.事实上,一旦我这样做,就找到了路线并执行了行动.

Hec*_*rea 6

我认为你的问题是ActionLink使用HTTP GET而你只接受HTTP POST.

您可能需要更改视图以发出HTTP POST(例如,在表单中使用常规HTML按钮),以便浏览器发送的动词与您在控制器上接受的动词匹配.