我在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。
答案 0 :(得分:0)
你有两条路线,好像你把它们混合在一起。您提供的路径(http://localhost:12190/Home/EditEmployee?id=1
)指的是第二条路线,而部门和名称参数 - 指向第一条路线。
也许您需要对第一条路线发表评论,并尝试使用您的参数集 - 操作和 id 。您还可以尝试使用属性路由来指定控制器和操作的路由