路由到区域中的子目录

时间:2017-05-10 20:01:59

标签: c# asp.net-mvc url-routing asp.net-mvc-routing asp.net-mvc-areas

我已经创建了一个区域: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. 时出现例外情况:

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" }
            );




        }
    }
}

我的文件夹结构适用于以下区域:

enter image description here

AdminAreaRegistration.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();
        }
    }
}

ByGroupController.cs

AdminAreaRegistration.cs

除了简单的网站之外,我还没有真正使用MVC而不是那么多级别的网站。我对这个错误的看法是什么,是否有更好的方法来组织具有视图子目录的区域?我没有必要进行自定义路由,因此我的{{1}}也可能不正确。

我感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:2)

默认情况下,路由只是一种抽象 - 也就是说,您的URL与控制器的物理位置完全无关。您可以使用路由以任意方式制作URL,同时将控制器放在任何您想要的位置。

另一方面,视图需要额外的工作才能放入不遵循约定的不同目录中。您可以通过更改视图引擎来执行此操作 - 请参阅Can I specify a custom location to "search for views" in ASP.NET MVC?

有一个第三方软件包可以帮助您实现这一目标 - MvcCodeRouting将根据您将控制器放入的文件夹自动生成路由。但是,您仍然需要修改视图引擎搜索视图,因为这些是完全不同的问题。