我正在学习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 }
);
}
}
答案 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 }
);
我相信你明白了。