【发布时间】:2013-07-15 06:45:04
【问题描述】:
默认路由是:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{category}",
defaults: new { controller = "Home", action = "Index", category = UrlParameter.Optional }
);
正在生成的 URL 如下所示:www.domain.com/Home/Index/Category
但如果用户正在浏览特定类别,我希望 URL 看起来像这样:www.domain.com/Home/Category
如果没有选择类别:www.domain.com/Home
我添加了这段代码:
routes.MapRoute(null, "{controller}/{category}", new { action = "Index" });
routes.MapRoute(null, "{controller}/{action}", new { controller = "Home", action = "Index", category = (string)null });
并且 URL 开始看起来像我想要的那样,但是!在控制器中调用动作的表单方法不再起作用:
@using (Html.BeginForm("AddToCart", "Home"))
{
@Html.Hidden("category", Model.CurrentCategory)
@Html.Hidden("productId", p.ProductId)
<input type="submit" value="Add To Cart" />
}
由于某种原因,表单操作方法似乎调用了错误的路由 那就是:
routes.MapRoute(null, "{controller}/{category}", new { action = "Index" });
而不是
routes.MapRoute(null, "{controller}/{action}", new { controller = "Home", action = "Index", category = (string)null });
因为当点击提交按钮时,浏览器重定向到 url: www.domain.com/Home/AddToCart 并且“Home”控制器中的操作方法“AddToCart”永远不会被调用。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-routing