我正在Web站点项目(而不是Web应用程序)中工作,Web Forms和MVC很高兴地在这里工作。为了组织我的代码,我正在尝试使用MVC部件设置区域并且遇到这种情况。
我已经使用我的控制器设置了我的区域,并创建了以下区域配置:
Namespace Areas.Awesome
Public Class AwesomeAreaRegistration
Inherits AreaRegistration
Public Overrides ReadOnly Property AreaName As String
Get
Return "Awesome"
End Get
End Property
Public Overrides Sub RegisterArea(context As AreaRegistrationContext)
context.MapRoute(
"Awesome_default",
"Awesome/{controller}/{action}/{id}",
New With {.controller = "Sauce", .action = "Index", .id = UrlParameter.Optional},
New String() {"Areas.Awesome"}
)
End Sub
End Class
End Namespace
当我尝试导航到/Awesome/Sauce/
时出现404错误,我的网站实际上尝试将我转到/Awesome/Sauce/Default.aspx
。
但是,当我将路线移至我的RouteConfig
时:
Public Module RouteConfig
Public Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}")
routes.MapRoute(
"Awesome_default",
"Awesome/{controller}/{action}/{id}",
New With {.controller = "Sauce", .action = "Index", .id = UrlParameter.Optional},
New String() {"Areas.Awesome"}
)
End Sub
End Module
按预期方式提供/Awesome/Sauce/
。
我做了一些挖掘并同时创建了这两条路径,但是使用不同的URI,我发现它们都以相同的方式定义,但是一个正在工作,一个没有。
区域注册是否缺少某些东西会导致这些路由被忽略而RouteConfig中定义的路由不是?
答案 0 :(得分:0)
可能与命名空间应用区域的方式有关。
请参阅this article
命名空间可能不完全符合该区域的条件。
public class ContactsAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Contacts";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Contacts_default",
"Contacts/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication1.Areas.Contacts.Controllers" }
);
}
}