0

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

var Url = '@Url.Action("GetSomething", "SomeController", 
         new { 
                 area = "", repository = Model.Repository, 
                 multiSelect = Model.MultiSelect })';

在我的 javascript 中,我使用上面定义的 Url 对象加载并获取以下 url

/EmployeeRepository/GetTree?multiSelect=True/1

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

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

如果网址是

/EmployeeRepository/GetTree/1/True

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

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

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

提前致谢

4

2 回答 2

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);
于 2013-08-08T12:52:42.490 回答
0

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

您可以为 ID 放置一个占位符,例如值“!!id!!” 并在需要时使用 Javascript 替换它。您也可以使用Url.HtmlRoute("HierarchyMultiSelect")强制执行特定路线,但仍需要合并 ID。

于 2013-08-08T13:31:28.443 回答