我已经阅读了很多关于这个问题的内容,但我无法解决这个问题。
使用路由和ASP .NET MVC,一切都非常简单,但我仍然坚持这一点。
问题在于我尝试使用此表单对给定网址进行GET:
{面积} / {控制器} / {动作}
但是{area}没有注册。我的默认路由也不起作用(在我需要转到localhost:port / Home而不是转到localhost:port /
的意义上不起作用)这是我的代码:
RouteConfig:
public class RouteConfig
{
public static void RegisterRoute(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
route.MapRoute(
"Default",
"{controller}/{action}",
new {controller = "Home", action = "Index"}
);
}
}
这是未注册的区域:
public class TransaccionesAreaRegistration : AreaRegistration
{
public override string AreaName
{
get{
return “Transacciones”;
}
}
public override void RegisterArea(AreaRegistrationContext context){
context.MapRoute(
"Transacciones_default",
"Transacciones/{controller}/{action}/{id}",
new { controller = "Transacciones", action = "Index", id = UrlParameter.Option}
);
}
}
最后,这是我的global.asax(我确实调用了AreaRegistration.RegisterAllAreas()方法):
protected void Application_Start(){
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
我真的很感激这方面的一些建议,我想我已经花了足够的时间用谷歌搜索:O)
答案 0 :(得分:2)
试试这个
RouteConfig:
public class RouteConfig
{
public static void RegisterRoute(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
route.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
这是未注册的区域:
public class TransaccionesAreaRegistration : AreaRegistration
{
public override string AreaName
{
get{
return “Transacciones”;
}
}
public override void RegisterArea(AreaRegistrationContext context){
context.MapRoute(
“Transacciones_default”,
“Transacciones/{controller}/{action}/{id}”,
new { action = ”Index”, id = UrlParameter.Optional },
new string[] { "MyApp.Transacciones.Controllers" } // specify the new namespace
);
}
}
------------------------------OR Try This--------------------------------
public class RouteConfig
{
public static void RegisterRoute(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
AreaRegistration.RegisterAllAreas();
route.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
答案 1 :(得分:2)
默认路由无效的原因
因为您从未注册过默认的。在RouteConfig
-
routes.MapRoute("Home", "", new { Controller = "Home", Action = "Index" });
所以最终的代码应该是这样的 -
public class RouteConfig
{
public static void RegisterRoute(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
routes.MapRoute("Home", "", new { Controller = "Home", Action = "Index" });
route.MapRoute(
"Default",
"{controller}/{action}",
new {controller = "Home", action = "Index"}
);
}
}
区域似乎无效的可能原因
也许是区域注册似乎不起作用的原因。尝试在区域注册中添加以下行 -
routes.MapRoute("Transacciones_Home", "Transacciones", new { Controller = "Transacciones", Action = "Index" });
所以看起来像 -
public class TransaccionesAreaRegistration : AreaRegistration
{
public override string AreaName
{
get{
return “Transacciones”;
}
}
public override void RegisterArea(AreaRegistrationContext context){
routes.MapRoute("Transacciones_Home", "Transacciones", new { Controller = "Transacciones", Action = "Index" });
context.MapRoute(
“Transacciones_default”,
“Transacciones/{controller}/{action}/{id}”,
new { controller = “Transacciones”, action = ”Index”, id = UrlParameter.Option}
);
}
}
}
答案 2 :(得分:1)
This问题是帮助我的问题。
事情是,路线中的顺序'注册非常重要。考虑到这一点,我开始检查我的其他区域注册,我发现所有落入第一条规则的请求都是这样的一般规则:
routes.MapRoute(
name : "Default",
url : {controller}{action}{id}
);
因此,在该规则之后,没有考虑任何规则。
感谢大家帮助,祝福!