路由到区域中的子目录
Route to Subdirectory in an Area
我创建了一个这样的区域:Admin/
我正在尝试在该区域中创建一个子目录:Admin/Permissions/ByGroup/
具有 Admin/Permissions/ByGroup/Edit/1
等功能。这是因为我将有其他方法来查看和编辑权限,例如 ByUser , ByActivity 等
但是,我在正确路由到 ByGroupController
及其视图时遇到了问题。 Admin/
和 Admin/Permissions/
(从 PermissionsController
中触发)都工作正常。
导航到 Admin/Permissions/ByGroup/
时出现异常:
Server Error in '/' Application.
The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/Admin/Views/ByGroup/Index.aspx
~/Areas/Admin/Views/ByGroup/Index.ascx
~/Areas/Admin/Views/Shared/Index.aspx
~/Areas/Admin/Views/Shared/Index.ascx
~/Views/ByGroup/Index.aspx
~/Views/ByGroup/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Areas/Admin/Views/ByGroup/Index.cshtml
~/Areas/Admin/Views/ByGroup/Index.vbhtml
~/Areas/Admin/Views/Shared/Index.cshtml
~/Areas/Admin/Views/Shared/Index.vbhtml
~/Views/ByGroup/Index.cshtml
~/Views/ByGroup/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
我的文件夹结构是这样的:
AdminAreaRegistration.cs
using System.Web.Mvc;
namespace MyMVCSite.Areas.Admin
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"ByGroup_default",
"Admin/Permissions/ByGroup/{controller}/{action}/{id}",
new { controller = "ByGroup", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyMVCSite.Areas.Admin.Controllers" }
);
context.MapRoute(
"Permissions_default",
"Admin/Permissions/{controller}/{action}/{id}",
new { controller = "Permissions", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyMVCSite.Areas.Admin.Controllers" }
);
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyMVCSite.Areas.Admin.Controllers" }
);
}
}
}
ByGroupController.cs
namespace MyMVCSite.Areas.Admin.Controllers
{
public class ByGroupController : Controller
{
// GET: Admin/ByGroup
public ActionResult Index()
{
return View();
}
// GET: Admin/ByGroup
public ActionResult Edit()
{
return View();
}
}
}
除了简单的网站之外,我还没有真正将 MVC 用于任何其他网站,也没有在具有这么多级别视图的网站上使用过。我该怎么办这个错误,是否有更好的方法来组织具有视图子目录的区域?我真的没有必要进行自定义路由,所以我的 AdminAreaRegistration.cs
也可能不正确。
感谢任何帮助或指导。
默认情况下,路由只是一个抽象概念——也就是说,您的 URL 与控制器的物理位置完全无关。您可以使用路由以任何您想要的方式制作 URL,同时将您的控制器放在任何您想要的地方。
另一方面,视图需要一些额外的工作才能放入不遵循约定的不同目录中。您可以通过更改视图引擎来实现 - 请参阅 Can I specify a custom location to "search for views" in ASP.NET MVC?.
有一个第 3 方包可以让您完成其中的一部分 - MvcCodeRouting 将根据您放置控制器的文件夹自动生成路线。但是,您仍然需要修改查看引擎搜索视图,因为这些是完全独立的问题。
我创建了一个这样的区域:Admin/
我正在尝试在该区域中创建一个子目录:Admin/Permissions/ByGroup/
具有 Admin/Permissions/ByGroup/Edit/1
等功能。这是因为我将有其他方法来查看和编辑权限,例如 ByUser , ByActivity 等
但是,我在正确路由到 ByGroupController
及其视图时遇到了问题。 Admin/
和 Admin/Permissions/
(从 PermissionsController
中触发)都工作正常。
导航到 Admin/Permissions/ByGroup/
时出现异常:
Server Error in '/' Application.
The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/Admin/Views/ByGroup/Index.aspx
~/Areas/Admin/Views/ByGroup/Index.ascx
~/Areas/Admin/Views/Shared/Index.aspx
~/Areas/Admin/Views/Shared/Index.ascx
~/Views/ByGroup/Index.aspx
~/Views/ByGroup/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Areas/Admin/Views/ByGroup/Index.cshtml
~/Areas/Admin/Views/ByGroup/Index.vbhtml
~/Areas/Admin/Views/Shared/Index.cshtml
~/Areas/Admin/Views/Shared/Index.vbhtml
~/Views/ByGroup/Index.cshtml
~/Views/ByGroup/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
我的文件夹结构是这样的:
AdminAreaRegistration.cs
using System.Web.Mvc;
namespace MyMVCSite.Areas.Admin
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"ByGroup_default",
"Admin/Permissions/ByGroup/{controller}/{action}/{id}",
new { controller = "ByGroup", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyMVCSite.Areas.Admin.Controllers" }
);
context.MapRoute(
"Permissions_default",
"Admin/Permissions/{controller}/{action}/{id}",
new { controller = "Permissions", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyMVCSite.Areas.Admin.Controllers" }
);
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyMVCSite.Areas.Admin.Controllers" }
);
}
}
}
ByGroupController.cs
namespace MyMVCSite.Areas.Admin.Controllers
{
public class ByGroupController : Controller
{
// GET: Admin/ByGroup
public ActionResult Index()
{
return View();
}
// GET: Admin/ByGroup
public ActionResult Edit()
{
return View();
}
}
}
除了简单的网站之外,我还没有真正将 MVC 用于任何其他网站,也没有在具有这么多级别视图的网站上使用过。我该怎么办这个错误,是否有更好的方法来组织具有视图子目录的区域?我真的没有必要进行自定义路由,所以我的 AdminAreaRegistration.cs
也可能不正确。
感谢任何帮助或指导。
默认情况下,路由只是一个抽象概念——也就是说,您的 URL 与控制器的物理位置完全无关。您可以使用路由以任何您想要的方式制作 URL,同时将您的控制器放在任何您想要的地方。
另一方面,视图需要一些额外的工作才能放入不遵循约定的不同目录中。您可以通过更改视图引擎来实现 - 请参阅 Can I specify a custom location to "search for views" in ASP.NET MVC?.
有一个第 3 方包可以让您完成其中的一部分 - MvcCodeRouting 将根据您放置控制器的文件夹自动生成路线。但是,您仍然需要修改查看引擎搜索视图,因为这些是完全独立的问题。