C# 控制器中无法识别URL参数
我正在学习MVC4,我的理解是,访问这个URL应该将int值44传递给控制器的Edit()方法。事实上,当我来到这里:C# 控制器中无法识别URL参数,c#,asp.net-mvc,C#,Asp.net Mvc,我正在学习MVC4,我的理解是,访问这个URL应该将int值44传递给控制器的Edit()方法。事实上,当我来到这里: http://localhost:51921/TrackerJob/Edit/44 。。。将调用此方法: public ActionResult Edit(int trackerJobId = -1) { Debug.WriteLine(trackerJobId); } 。。。但参数始终为-1。我在另一个项目中工作过,但由于某种原因,在这个项目中它总是-1。我看不出
http://localhost:51921/TrackerJob/Edit/44
。。。将调用此方法:
public ActionResult Edit(int trackerJobId = -1)
{
Debug.WriteLine(trackerJobId);
}
。。。但参数始终为-1。我在另一个项目中工作过,但由于某种原因,在这个项目中它总是-1。我看不出两个项目之间有什么区别,这两个项目会导致一个成功,另一个失败。如果我将方法签名更改为:
public ActionResult Edit(int trackerJobId)
{
Debug.WriteLine(trackerJobId);
}
我得到一个错误:
参数字典包含不可为空的类型“System.Int32”的参数“trackerJobId”的空条目。
有什么想法吗?我不确定要检查什么
编辑-根据请求包括路线*
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
如果要使用默认路由,则只需确保参数名为
id
否则,您可以添加如下所示的新路线:
routes.MapRoute(
name: "TrackerJob",
url: "{controller}/{action}/{jobtrackerid}",
defaults: new { controller = "TrackerJob", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "TrackerJobEdit",
url: "TJ-E-{jobtrackerid}",
defaults: new { controller = "TrackerJob", action = "Edit", id = UrlParameter.Optional }
);
确保在默认路由之前添加此路由。路线的顺序非常重要
只有您知道trackerJobId是否可选
请注意,如果您想要更奇特的东西,您可以调整路线以产生您想要的东西
e、 g.如果你想要像http://localhost:51921/TJ-E-44
如果要编辑,则您的路线如下所示:
routes.MapRoute(
name: "TrackerJob",
url: "{controller}/{action}/{jobtrackerid}",
defaults: new { controller = "TrackerJob", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "TrackerJobEdit",
url: "TJ-E-{jobtrackerid}",
defaults: new { controller = "TrackerJob", action = "Edit", id = UrlParameter.Optional }
);
我相信你明白了。我的第一个怀疑是路线。如果浏览到
http://localhost:51921/TrackerJob/Edit?trackerJobId=44
向我们展示您从Global.asax
出发的路线。如果您根本没有更改它们,请尝试将ActionMethod
的签名更改为public ActionResult Edit(int-Id)
,因为默认路径中包含了这一点。@DuncanHowe您的建议有效。现在转到Global.asax thingy…@Dommer,我编辑了我的问题以显示RouteConfig类。这是否意味着我的参数名必须是id,而不能是trackerJobId?谢谢,伙计们。如果有人想提供答案,我会接受……谢谢。为了我自己的理智,我想指出,我可以通过将参数名从trackerJobId更改为id来解决这个问题。