控制器中无法识别URL参数

时间:2012-08-21 22:45:25

标签: c# asp.net-mvc

我正在学习MVC 4,我的理解是,转到此URL应该将44的int传递给控制器​​的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);
}

我收到错误:

The parameters dictionary contains a null entry for parameter 'trackerJobId' of non-nullable type 'System.Int32'

有什么想法吗?我不确定要检查什么...

编辑 - 按要求包含路线*

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 }
        );
    }
}

1 个答案:

答案 0 :(得分:3)

如果您想使用默认路由,请确保您的参数名为id

否则你可以添加这样的新路线:

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

确保在默认路线之前添加此路线。路线的顺序非常重要!

只有您知道trackerJobId是否可选。

请注意,如果您想要更有趣的东西,可以调整路线以产生您想要的东西。

e.g。如果您想要http://localhost:51921/TJ-E-44这样的网址进行编辑,那么您的路线将如下所示:

routes.MapRoute(
    name: "TrackerJobEdit",
    url: "TJ-E-{jobtrackerid}",
    defaults: new { controller = "TrackerJob", action = "Edit", id = UrlParameter.Optional }
);

我相信你明白了。