构建我的第一个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)
{
   ...
}

做了一些搜索,并认为我可能需要修改Global.asax.cs文件的routes中的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的ID,而10是菜单的ID。

我期望发生的事情是调用RemoveMenuIceCreamMapping Action ,并传递这两个参数,但是显然我在这里没有做任何事情,并且可能只是误解了如何完成我想要的事情并以错误的方式进行操作。任何指导将不胜感激。

更新

因此,我了解到的另一件事是,在阅读this SO question之后,我的ActionLink不会触发POST,因此从操作中删除[HttpPost]似乎是正确的做法。而且,事实上,一旦我这样做,就找到了路线并执行了 Action 。

最佳答案

我认为您的问题是ActionLink使用HTTP GET,而您仅接受HTTP POST。

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

关于asp.net - ActionLink 404错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7149491/

10-13 06:05