Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在我的URL中查找id的路由配置_C#_Ajax_Asp.net Mvc_Routes_Routeconfig - Fatal编程技术网

C# 在我的URL中查找id的路由配置

C# 在我的URL中查找id的路由配置,c#,ajax,asp.net-mvc,routes,routeconfig,C#,Ajax,Asp.net Mvc,Routes,Routeconfig,如何更正路由以解决ajax.load()的问题 我修改了到spacecontroller的路径,使其看起来像这样 routes.MapRoute( name: "SpaceCleanRoute", url: "Space/{id}", defaults: new { controller = "Space", action = "Index" } ); 因此,我有一个更干净的路线,当用户想要查看空间时,UR

如何更正路由以解决ajax.load()的问题

我修改了到spacecontroller的路径,使其看起来像这样

routes.MapRoute(
            name: "SpaceCleanRoute",
            url: "Space/{id}",
            defaults: new { controller = "Space", action = "Index" }
        );
因此,我有一个更干净的路线,当用户想要查看空间时,URL将如下所示

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

我现在遇到的问题是,当我的JS文件像这样调用.load()时,spaceoverview是我的操作

$("#partialPageContainer").load('/Space/SpaceOverview', function (response, status, xhr) {
        alert("Load was performed.");
    });
我听到一个错误说

参数字典包含“YogaBandy2017.Controllers.SpaceController”中方法“System.Web.Mvc.ActionResult Index(Int32)”的不可为null类型“System.Int32”的参数“id”的null条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数

所以我必须在url后面加一个id,就像这样,这不是我想要的,或者对我来说不合适

我如何解决这个问题,或者这就是路由的工作原理?我对使用ASP.Net的mvc路由有点陌生

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

已更新-我想现在我将只使用“/space/actionname/1”连接到每个操作,直到找到更好的解决方案。

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

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

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

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

可以使用参数约束过滤出
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 }
);
第一条路会赶上你的车

/空格/12345

例如,由于
12345
@“\d+”
模式匹配,因此第二条路由将处理您的

/空间/空间概览

例如,因为
SpaceOverview
没有

您可以在此处找到更多有关管线约束的信息和示例:

编辑:我相信您也可以使用一个内置的路由约束(这可能会更好,因为从技术上讲,一个值可以匹配
@“\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()}
);

可以使用参数约束过滤出
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 }
);
第一条路会赶上你的车

/空格/12345

例如,由于
12345
@“\d+”
模式匹配,因此第二条路由将处理您的

/空间/空间概览

例如,因为
SpaceOverview
没有

您可以在此处找到更多有关管线约束的信息和示例:

编辑:我相信您也可以使用一个内置的路由约束(这可能会更好,因为从技术上讲,一个值可以匹配
@“\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()}
);

你们有并没有试着先把id和nullable设置为空,只是为了确保它的路径正确?我不知道你们的意思。你能举个例子吗?如果我使用url“/space/spaceoverview/{id}”,那么它可以工作,其中id是任意数字。如果我不使用id,则会引发异常,并且永远不会进入该操作。这似乎是不对的,我想知道是否有一种方法可以让我不必输入加载的id?
/Space/SpaceOverview
意味着您调用
SpaceController
Index()
方法(由您的路径定义),并将文本“SpaceOverview”传递给
int id
参数(当然会失败,
id
null
——因此出现异常)。如果您想点击
SpaceOverview()
method,然后您需要删除该路由定义,或者在
SpaceCleanRoute
路由之前为每个方法创建特定路由,或者添加一个约束以确保第二段是
int
您是否尝试先将id和null设置为可空,以确保它符合正确的路由?我不确定您的意思。您能提供id吗例如,如果我使用url'/space/spaceoverview/{id}'然后它就可以工作了,id是任意数字。如果我不使用id,则会引发异常,并且永远不会输入操作。这似乎不正确,我想知道是否有方法使我不必为加载输入id?
“/Space/SpaceOverview
意味着调用
索引()
方法
SpaceController
(由您的路线定义),您将文本“SpaceOverview”传递给
int id
参数(当然会失败,
id
null
-因此出现异常)。如果您想点击
SpaceOverview()
method,则需要删除该路由定义,或在
SpaceCleanRoute
路由之前为每个方法创建特定路由,或添加约束以确保第二段为
int