2

我正在学习 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 }
        );
    }
}
4

1 回答 1

3

如果您想使用默认路由,那么只需确保您的参数被调用id

否则,您可以像这样添加新路线:

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

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

只有您知道是否trackerJobId可选。

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

例如,如果您想要http://localhost:51921/TJ-E-44编辑 URL,那么您的路线将如下所示:

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

我相信你明白了。

于 2012-08-21T23:03:49.320 回答