2012-10-17 69 views
1

我VisitsController:MVC4控制器/路由不工作

public ActionResult Index(Visits visits, int? id) 
{ 
    .... 
    return View(v); 
} 

,这里是我的路由配置

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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


Works: http://localhost:49225/Visits 
Does not work: http://localhost:49225/Visits/123 

什么将自定义路线(和强迫它是一个整数)?

+1

对于http:// localhost:49225/Visits/123,您需要创建一个新路由,或使用http:// localhost:49225/Visits/Index/123 –

+0

您是否尝试使用http:// localhost: 49225 /访问/索引/ 123? –

+0

@Husein是的,它的工作原理,thx,但我想localhost:49225/Visits/123工作。 – ginalster

回答

1

你需要添加一个新的工作路线。

目前,这将工作:

/Visits/Index/123 

我相信你需要添加以下内容:

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

这是假设你有访问已经是ModelBinder的。

+0

Thx!我添加了约束并删除了可选参数。对其他人来说,至少在这种情况下,这必须在默认路线之前。 routes.MapRoute( 名: “VisitsForDate”, URL: “访问/(编号)”, 的默认值:新{控制器= “访问”,动作= “索引”}, 约束:新{ID = @ “\ d +”} ); – ginalster

+0

正确!总是从最具体到最一般的顺序排列你的路由,因为路由引擎会尝试按顺序匹配所有路由。很高兴我能帮上忙。 – ItsJason