构建我的第一个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)
{
...
}进行了一些搜索,并相信我可能需要修改Global.asax.cs文件的RegisterRoutes中的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将被调用,传递这两个参数,但我显然没有在这里做一些事情,可能只是误解了如何完成我想要的事情,并且正在以错误的方式进行。如有任何指导,将不胜感激。
更新
因此,我还学到了一件事,在阅读了this SO question之后,我的ActionLink并没有触发一个帖子,因此将[HttpPost]从操作中删除似乎是正确的。事实上,当我这么做的时候,路线就被找到了,行动也就执行了。
发布于 2011-08-22 15:19:10
我认为您的问题是,ActionLink使用HTTP,而您只接受HTTP。
您可能需要更改视图以发出HTTP (例如,在表单中有一个常规HTML按钮),以便浏览器发送的谓词与您在控制器上接受的内容匹配。
https://stackoverflow.com/questions/7149491
复制相似问题