Asp.net mvc 使用url.action时MVC路由问题

Asp.net mvc 使用url.action时MVC路由问题,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我有一个javascript文件,在我的视图中定义了以下url.action var Url = '@Url.Action("GetSomething", "SomeController", new { area = "", repository = Model.Repository, multiSelect = Model.MultiSelect })'; 在我的javascript中,我使用上面定义

我有一个javascript文件,在我的视图中定义了以下url.action

var Url = '@Url.Action("GetSomething", "SomeController", 
         new { 
                 area = "", repository = Model.Repository, 
                 multiSelect = Model.MultiSelect })';
在我的javascript中,我使用上面定义的Url对象加载并获得以下Url

/EmployeeRepository/GetTree?multiSelect=True/1

My这会导致问题,因为url未正确映射到路由配置,路由配置为:

  routes.MapRoute("HierarchyMultiSelect", 
                    "{repository}/{action}/{id}/{multiSelect}", 
                     new { controller = "SomeController", 
                     id = UrlParameter.Optional, 
                     multiSelect = UrlParameter.Optional }, 
                     new { repository = @"\w*Repository$" }, namespaces);
如果url为

/EmployeeRepository/GetTree/1/True

因此,我想知道如何从我的javascript中获取url的格式,该javascript目前执行以下操作:

 staffTree.load(url + "/" + id, function () {}
使用参数使用路由数据还是在javascript中对url排序更好


提前感谢

可能我错了,但您的操作结果未在路由中设置。在我看来,您应该在路线中添加
action=“GetTree”
语句:

routes.MapRoute(
                name: "HierarchyMultiSelect", 
                url: "{repository}/{action}/{id}/{multiSelect}", 
                defaults: new { controller = "SomeController", 
                        action = "GetTree", 
                        id = UrlParameter.Optional, 
                        multiSelect = UrlParameter.Optional }, 
                new { repository = @"\w*Repository$" }, namespaces);

您的路线需要属性“ID”。您不能有两个可选参数,并期望能够为第二个参数指定值,但不能为第一个参数指定值。指定ID或创建没有ID的路由

您可以为ID添加一个占位符,如值“!!ID!!”,并在需要时使用Javascript替换该占位符。您还可以使用
Url.HtmlRoute(“HierarchyMultiSelect”)
强制执行特定路由,但仍需要在ID中合并