C# 在我的URL中查找id的路由配置
如何更正路由以解决ajax.load()的问题 我修改了到spacecontroller的路径,使其看起来像这样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
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