我正在开发一个ASP.NET MVC应用程序。内容分为几个方面:
我没有任何控制器没有分配到区域。
我想在不输入区域名称的情况下访问Pages
个控制器,而在路由中使用区域名称访问其他控制器。
所以我想在Users
Administration
页面中显示操作host/Administration/Users
我想在DatabaseTimeout
下的Error
控制器中显示host/Scheme/Error/DatabaseTimeout
动作。
类似地,我希望来自Create
下Codes
区域Data
控制器的host/Data/Codes/Create
动作。
现在,问题:Pages
区域按预期工作,Data
区域按预期工作,Scheme
区域无法按预期工作。键入host/Scheme/Error/DatabaseTimeout
时,应用程序返回404。
谁能告诉我出了什么问题?
以下是应用程序代码的一部分:
的Global.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
尽管指定了区域。我试图将区域参数更改为区域="",没有帮助。
请帮助我,我很困惑,我不能继续我的工作。 :(
答案 0 :(得分:0)
当您键入host/Scheme/Error/DatabaseTimeout
时,应用程序可能返回404,因为您在Scheme
区域的ErrorController.cs中没有动作DatabaseTimeout:
namespace MyWebApplication.Areas.Scheme.Controllers
{
public class ErrorController : Controller
{
public ActionResult DatabaseTimeout()
{
return View();
}
}
}
您必须在Areas\Scheme\Views\Error\DatabaseTimeout.cshtml
下的项目中创建用户显示错误的视图。
另一个问题 - >我认为,如果您想在Index()
区域HomeController
下创建一个指向行动Scheme
的链接,则必须在视图中使用此链接:
@Html.ActionLink("Home", "Index", "Home", new { area = "Scheme" }, null)