1

超级简单的 MVC 站点,带有一个区域来处理移动设备。除了需要参数的视图外,我所有的区域路由都可以正常工作。

在“正常”站点中,我有一个需要参数的查看视频页面。

mysite.com/Video/123456

这完美地工作。在我的区域为移动内容进行了一些斗争之后,我什至开始在我的控制器和视图中使用完全相同的代码/标记。所以我希望以下网址:

mysite.com/Mobile/Video/123456

会妥善解决。它没有。我得到一个 404(未找到)。如果我关闭参数:

mysite.com/Mobile/Video

它可以正确解决。

我确信这一定是我在路由中做错了。以下是我的 global.asax 中的相应部分。任何帮助,将不胜感激。

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

        routes.MapRoute( 
            "Video", // Route name 
            "Video/{id}", // URL with parameters 
            new { controller = "Video", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
            new string[] { "mysite.Controllers.VideoController" } 
        ); 

        routes.MapRoute( 
            "NewsItem", // Route name 
            "NewsItem/{id}", // URL with parameters 
            new { controller = "NewsItem", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
        ); 

        routes.MapRoute( 
            "Default", // Route name 
            "{controller}/{action}/{id}", // URL with parameters 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
            new string[] { "mysite.Controllers.HomeController" } 
        ); 

        routes.MapRoute( 
            "Mobile", // Route name 
            "{controller}/{action}/{id}", // URL with parameters 
            new { area = "Mobile", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
            new string[] { "mysite.Areas.Mobile.Controllers.HomeController" } 
        ); 

        routes.MapRoute( 
            "Mobile/Video", // Route name 
            "Mobile/Video/{id}", // URL with parameters 
            new { area = "Mobile", controller = "Video", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
            new string[] { "mysite.Areas.Mobile.Controllers.VideoController" } 
        ); 
    }
4

2 回答 2

1

SteveInTN,您不能在 Global.asax 和 MobileAreaRegistration.cs 中进行相同的注册。

您只需要在 MobileAreaRegistration.cs 上进行移动注册,并在 RegisterRoutes(RouteTable.Routes) 之前在 Application_Start 中调用 AreaRegistration.RegisterAllAreas()。

如果你想要像 mysite.com/Mobile/Video/123456 这样的 url:移动路由注册应该是 {controller} / {id} 格式,如视频路由。

在 Global.asax 注册:

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

    routes.MapRoute( 
        "Video", // Route name 
        "Video/{id}", // URL with parameters 
        new { controller = "Video", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
        new string[] { "mysite.Controllers.VideoController" } 
    ); 
    //newsitem route
}

在 MobileAreaRegistration 上注册:

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Mobile_default",
            "Mobile/{controller}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
于 2011-11-03T22:51:00.203 回答
0

看起来您的 Route 名称不应包含 / 因为它可能与路由冲突?当我进行路由时,我确保名称是唯一的,并使用下划线来表示分隔符,如下所示:text_text。不确定这是否可行,但值得一试。

于 2011-11-03T20:08:01.377 回答