【发布时间】:2016-12-09 18:52:36
【问题描述】:
如何更正路由以解决 ajax .load() 的问题
我修改了到我的空间控制器的路线,使其看起来像这样
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.");
});
我收到一个错误提示
参数字典包含“YogaBandy2017.Controllers.SpaceController”中方法“System.Web.Mvc.ActionResult Index(Int32)”的不可为空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数
所以我必须在这样的 url 后面加上一个 id,这不是我想要的,或者对我来说似乎不合适
我该如何解决这个问题,或者这就是路由的工作原理?我对使用 ASP.Net 的 mvc 路由有点陌生
$("#partialPageContainer").load('/Space/SpaceOverview/1', function (response, status, xhr) {
alert("Load was performed.");
});
已更新 - 我想现在我将使用 '/space/actionname/1' 连接到每个操作,直到找到更好的解决方案。
【问题讨论】:
-
您是否尝试过先将 id 和 nullable 设置为可空,以确保它走在正确的路线上?
-
我不确定你的意思。你能举个例子吗?如果我使用 url '/space/spaceoverview/{id}' 那么它可以工作,其中 id 是任何数字。如果我不使用 id ,则会引发异常并且永远不会进入该操作。这似乎不对,我想知道是否有办法做到这一点,这样我就不必输入 id 来加载?
-
'/Space/SpaceOverview表示您调用SpaceController的Index()方法(由您的路线定义)并将文本“SpaceOverview”传递给int id参数(这当然会失败并且id是null- 因此例外)。如果您想点击SpaceOverview()方法,那么您需要删除该路由定义,或者在SpaceCleanRoute路由之前为每个方法创建特定路由,或者添加约束以确保第二段是int跨度>
标签: c# ajax asp.net-mvc routes routeconfig