在位于某个区域的控制器中调用return View()
时,它会尝试在主~/Views/{Controller}/
文件夹和主~/Views/Shared/
文件夹中找到该视图。它不会查看~/{Area}/Views/{Controller}/
文件夹。
我尝试将area
的路由值添加到MapRoute
函数,并尝试将“area”的'datatoken'添加到Route的DataTokens
属性。
我在这里错过了什么吗?
这是MapRoute
电话:
routes.MapRoute("Product", "Products/{GroupName}/{CategoryId}/{CategoryName}/{ProductId}/{ProductName}/{PageName}", New With {.Area = "Products", .controller = "Products", .action = "Product", .PageName = ""}, New With {.CategoryId = "[0-9]*", .ProductId = "[0-9]*"})
答案 0 :(得分:0)
一般的东西要看:
您是否已注册区域映射和区域映射? 你有两个位置的控制器同名吗?
global.asax中的区域映射示例
见行:AreaRegistration.RegisterAllAreas(); //这是你需要做的部分
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); // This is part you neeed to do
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
}
并且每个区域都必须在某处设置映射或映射文件。 这里的例子
命名空间项目 { /// ///管理区域的注册 /// public class AdministratorAreaRegistration:AreaRegistration { /// ///获取要注册的区域的名称。 /// ///要注册的区域的名称。 公共覆盖字符串AreaName { 得到 { 返回“管理员”; } }
/// <summary>
/// Registers an area in an ASP.NET MVC application using the specified area's context information.
/// </summary>
/// <param name="context">Encapsulates the information that is required in order to register the area.</param>
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Administrator_default",
"Administrator/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional });
}
}
}
如果你有路由问题,请检查一下。
我建议使用本指南,并为每个路由创建测试: http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx
答案 1 :(得分:0)
正如我们通常使用的区域一样,我们添加了AeaRegistraion文件(FooAreaRegistration.cs)并覆盖了AreaName和RegisterArea()方法。 AreaName我们设置为AearRegistration文件所在文件夹相对于全局应用程序的相对路径。以下是示例。
public class FooAreaRegistration : AreaRegistration
{
/// <summary>
/// Get the Area Name
/// </summary>
public override string AreaName
{
get { return "ParentApp/AreaFolder"; }
}
/// <summary>
/// Map and Route the area
/// </summary>
/// <param name="context"></param>
public override void RegisterArea(AreaRegistrationContext context)
{
if (null != context)
{
//context.maproute goes here
}
}
}