路由配置在我的URL中寻找ID



如何纠正我的路由以解决Ajax .load()

我修改了通往我的spacecontroller的路线,使它看起来像

routes.MapRoute(
            name: "SpaceCleanRoute",
            url: "Space/{id}",
            defaults: new { controller = "Space", action = "Index" }
        );

,我有一个更干净的路线,当用户想查看一个空间时,URL将看起来像

www.mysite/space/12345

我现在遇到的问题是当我的js文件称为.load()时,spaceOverView是我的操作

$("#partialPageContainer").load('/Space/SpaceOverview', function (response, status, xhr) {
        alert("Load was performed.");
    });

我有一个错误说

该参数字典包含一个无效类型的参数'id'system.int32'System.web.mvc.mvc.actionResult index(int32)'的null条目。可选参数必须是参考类型,可随机的类型,或称为可选参数。 参数名称:参数

所以我必须在这样的URL之后放置一个ID,这不是我想要的,或者对我来说似乎不正确

我该如何修复此问题,或者这只是路由的工作原理?我有点新的MVC路由使用ASP.NET

$("#partialPageContainer").load('/Space/SpaceOverview/1', function (response, status, xhr) {
        alert("Load was performed.");
    });

更新 - 我想现在我只使用'/space/actionname/1'连接到每个动作,直到我找到一个更好的解决方案为止。

您可以使用参数约束来过滤id参数的字符串值。

routes.MapRoute(
    name: "SpaceCleanRoute",
    url: "Space/{id}",
    defaults: new { controller = "Space", action = "Index" }
    constraints: new { id = @"d+" }
);

然后,您需要设置默认路由来处理与该约束不匹配的内容:

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

第一条路线将抓住您的

/space/12345

示例,因为12345@"d+"模式匹配,但是第二个路线将处理您的

/Space/SpaceOverView

示例,因为SpaceOverview没有。

您可以在此处找到更多信息和路由约束的示例:https://www.asp.net/mvc/overview/older-wolder-versions-1/controllers-anders-and-routing--routing/creating-a-route-a-route-contraint-css-cs

编辑:我相信您也可以使用内置的路由约束之一(可能会更好,因为从技术上讲,值可以与@"d+"模式匹配,但仍然不是有效的INT),例如:

routes.MapRoute(
    name: "SpaceCleanRoute",
    url: "Space/{id}",
    defaults: new { controller = "Space", action = "Index" }
    constraints: new { id = new System.Web.Http.Routing.Constraints.IntRouteConstraint()}
);

如果要发送操作参数,请尝试以下操作:

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

相关内容

  • 没有找到相关文章

最新更新