在路由中更改时,参数字典包含参数“id”的空条目

时间:2015-06-21 17:47:55

标签: c# asp.net asp.net-mvc asp.net-mvc-routing

我在routeConfig文件中完成了路由,如下所示。

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Search",
                url: "{controller}/{action}/{department}/{name}",
                defaults: new { controller = "Search", action = "Result",name =UrlParameter.Optional}
                );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

我只想要name参数应该是可选的,所以通过编写

来做到这一点
name =UrlParameter.Optional

但现在点击此链接

@Html.ActionLink("Edit", "EditEmployee", new { id = item.Id })

它给我例外“The parameters dictionary contains a null entry for parameter 'id'

案例1: 但是当我这样做时,

defaults: new { controller = "Search", action = "Result"}

删除名称可选,它工作正常。

案例2: 当我这样做时

defaults: new { controller = "Search", action = "Result", department =UrlParameter.Optional, name=UrlParameter.Optional}

使两个参数都可选,也可以正常工作,但现在为Edit生成的Url如下所示

http://localhost:12190/Home/EditEmployee?id=1

但我希望像这样干净的网址 http://localhost:12190/Home/EditEmployee/1

那么如何才能获得两者,只有name参数是可选的,也是一个干净的URL。

1 个答案:

答案 0 :(得分:0)

你有两条路线,好像你把它们混合在一起。您提供的路径(http://localhost:12190/Home/EditEmployee?id=1)指的是第二条路线,而部门名称参数 - 指向第一条路线。

也许您需要对第一条路线发表评论,并尝试使用您的参数集 - 操作 id 。您还可以尝试使用属性路由来指定控制器和操作的路由