使用url.action时的MVC路由问题

时间:2013-08-08 09:33:47

标签: 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中,我使用上面定义的Url对象加载并获取以下网址

  

/ EmployeeRepository / GetTree?MULTISELECT =真/ 1

我的这会导致一个问题,因为网址没有正确映射到路由配置:

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

如果网址为

,则有效
  

/ EmployeeRepository / GetTree / 1 /真

所以我想知道如何从目前执行以下操作的javascript格式中获取网址:

 staffTree.load(url + "/" + id, function () {}

使用参数使用路径数据或在javascript中对网址进行排序会更好吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

可能是我错了,但你的ActionResult没有在路由中设置。在我看来,你应该在你的路线上添加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);

答案 1 :(得分:0)

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

您可以为ID添加占位符,例如值“!! id !!”并根据需要使用Javascript替换它。您还可以使用Url.HtmlRoute("HierarchyMultiSelect")强制执行特定路由,但仍需要合并ID。