【发布时间】:2016-07-13 05:28:08
【问题描述】:
我正在开发一个 ASP.NET MVC 应用程序。内容分为几个方面:
- 方案 - 用于错误等共享功能
- 页面 - 用于显示的内容
- 数据 - 对于控制器,返回 JSON 数据
我没有任何未分配到区域的控制器。
我想在不输入区域名称的情况下访问Pages 控制器,以及在路由中使用其区域名称访问的其他控制器。
所以我想在Administration页面下host/Administration/Users下显示动作Users
我想在host/Scheme/Error/DatabaseTimeout 下显示来自Error 控制器的DatabaseTimeout 操作。
类似地,我想要来自Codes 控制器的Create 动作来自Data 区域下的host/Data/Codes/Create。
现在,问题是:Pages 区域按预期工作,Data 区域按预期工作,Scheme 区域按预期工作。当输入 host/Scheme/Error/DatabaseTimeout 应用程序返回 404。
谁能告诉我怎么了?
这是应用程序代码的一部分:
全球.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
RouteConfig.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
}
DataAreaRegistration.cs
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Data_default",
"Data/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyWebApplication.Areas.Data.Controllers" }
);
}
PagesAreaRegistration.cs:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Pages_default",
"{controller}/{action}/{id}",
new { controller="Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyWebApplication.Areas.Pages.Controllers" }
);
}
SchemeAreaRegistration.cs:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Scheme_default",
"Scheme/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyWebApplication.Areas.Scheme.Controllers" }
);
}
来自Pages 区域的AdministrationController.cs:
namespace MyWebApplication.Areas.Pages.Controllers
{
public class AdministrationController : Controller
{
// action methods...
}
}
来自Data 区域的CodesController.cs:
namespace MyWebApplication.Areas.GridData.Controllers
{
public class CountryCodesController : Controller
{
// action methods...
}
}
来自Scheme 区域的ErrorController.cs:
namespace MyWebApplication.Areas.Scheme.Controllers
{
public class ErrorController : Controller
{
// action methods...
}
}
编辑:
好吧,现在我真的很困惑。
所以在Scheme 区域下,我有:
- _Layout.cshtml 文件,wchich 是每个显示页面的母版页
- Menu.cshtml,这是Menu 操作的视图,并在_Layout 上呈现
Menu 视图由:
@{Html.RenderAction("Index", "Menu", new { area="Scheme" });}
菜单渲染得很好,但是...
菜单中有很多动作链接,指向不同的页面,写法如下:
@Html.ActionLink("Manage users", "Users", "Administration", new { area = "Pages" }, null)
这给出了这样的路线:host/Scheme/Administration/Users
即使指定了区域。我试图将 area 参数更改为 area="",但没有帮助。
请帮助我,我很困惑,我的工作无法继续。 :(
【问题讨论】:
标签: asp.net asp.net-mvc routes asp.net-mvc-areas