C# 控制器中无法识别URL参数

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。我看不出

我正在学习MVC4,我的理解是,访问这个URL应该将int值44传递给控制器的Edit()方法。事实上,当我来到这里:

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来解决这个问题。