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)
做了一点搜索并相信我可能需要修改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 }
};
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 我得到了"资源无法找到".错误,404.请求的URL:/ IceCream/RemoveMenuIceCreamMapping/1/10
1是IceCream的Id,10是菜单的Id.
我期待发生的事情是动作RemoveMenuIceCreamMapping
将被调用,传递这两个参数,但我显然没有在这里做某事,可能只是误解了如何完成我想要的事情并以错误的方式去做.任何指导都将非常感激.
更新
所以,在我阅读了这个问题后,我还学到了另一件事,我ActionLink
没有触发POST,所以[HttpPost]
从行动中删除似乎是正确的事情.事实上,一旦我这样做,就找到了路线并执行了行动.
我认为你的问题是ActionLink使用HTTP GET而你只接受HTTP POST.
您可能需要更改视图以发出HTTP POST(例如,在表单中使用常规HTML按钮),以便浏览器发送的动词与您在控制器上接受的动词匹配.
归档时间: |
|
查看次数: |
2952 次 |
最近记录: |