超级简单的MVC网站,带有处理移动设备的区域。除了需要参数的视图外,我的所有区域路由都可以正常工作。
在“普通”网站中,我有一个需要参数的视频页面。
mysite.com/Video/123456
这完美无缺。在我的区域中针对移动内容进行了一些争论后,我甚至在Controller和View中使用了完全相同的代码/标记。所以我希望以下网址:
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" }
);
}
答案 0 :(得分:1)
SteveInTN,您不能在Global.asax和MobileAreaRegistration.cs中进行相同的注册。
您只需要在MobileAreaRegistration.cs上进行移动注册,并在RegisterRoutes(RouteTable.Routes)之前在Application_Start中调用AreaRegistration.RegisterAllAreas()。
如果你想要像mysite.com/Mobile/Video/123456这样的网址: 移动路由注册的格式应为{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 }
);
}
答案 1 :(得分:0)
看起来您的路线名称不应包含/因为它可能与路由冲突?当我做路由时,我确保名称是唯一的,并使用下划线来表示像这样的分隔符:text_text。不确定这是否有效,值得一试。