文章类型: .NET
关键词: asp.net,.net,mvc,多级,目录结构,多级area,area,实现技巧
内容摘要: asp.net mvc多级目录结构和多级area实现技巧

asp.net mvc多级目录结构和多级area实现技巧

2018/8/6 9:57:19    来源:apple    阅读:

今天在工作要实现这个多级area。其原因是这个项目需要多级的功能,大的类别里有小的类别,小的类别里有具体的功能项,每一个功能项还有若干动作Action,所以在菜单和mvc工程的结构上都需要有体现多级的元素,菜单是用的accordion,每一个大类就是accordion的一个pane,然后每一个小类就是用一个表格来表示的,每一个功能就是用单元格加一个链接来表示的。在网站目录结构上,area可以很方便地实现一级的目录结构,比如可以有admin, backoffice, logging, business reporting等area, 每一个area下可以若干个controllers和views,但是要实现多级的目录结构就没有人详细地写过,笔者在这里介绍一种实现多级目录结构的方法。

假设我们要实现如下的一些多级目录结构这里举例就只用了两级, 更多级的道理是一样的):

Admin

     Access Management

     Function Management

     Data Permission Management

Backoffice

     Risk analysis

     Risk settings

     Risk reporting

     Risk transfer

第一步:在MVC project里加入Admin和Backoffice两个Area,结果如图1:

image.png

第二步, 这里就以Admin为例子, 在其中加入AccessManagement, FunctionManagement, DataPermissionManagement几个Folder,如图2:

image.png

第三步,将Controllers, Models, Views, AdminAreaRegistration.cs拷贝到AccessManagement, FunctionManagement, DataPermissionManagement目录,然后把Admin之下的Controllers, Models, Views, AdminAreaRegistration.cs全部都删除。最后变成这样的:

image.png

第四步:将AccessManagement目录里的AdminAreaRegistration改名成AccessManagementAreaRegistration.cs, 里面的内容也改成:

using System.Web.Mvc;

namespace MvcApplication1.Areas.Admin.AccessManagement
{
    public class AccessManagementAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin/AccessManagement";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_AccessManagement_default",
                "Admin/AccessManagement/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

我们需要为FunctionManagement和DataPermissionManagement也做同样的事情。
这样我们就为创建controller做好了准备。

如果我们需要给AccessManagement创建一个controller, 右键点"AccessManagement"目录下的Controllers目录,选择Add -> Controllers,然后创建此controller对应的View。这样,就可以创建好多级目录。

在访问的时候,其访问URL是http://<hostname>:<portnumber>/Admin/AccessManagement/, 其他的二级目录的做法是一样的。

 

ASP.NET MVC默认的文件组织和URL访问都是一级,我们通常要将一个功能模块组织到一个目录下。方法是:

1、文件组织

image.png


分别在Controllers和Views文件夹下建议CaiGou文件夹,然后将CaiGou模块的CV将到对应文件夹下

 

2、URL Routing

//采购部分路由  
            routes.MapRoute(  
                "CaiGou", // 路由名称  
                "CaiGou/{controller}/{action}/{id}", // 带有参数的 URL  
                new { controller = "AddCaiGou", action = "Index", id = UrlParameter.Optional } // 参数默认值  
            );  
  
            //默认路由  
            routes.MapRoute(  
                "Default", // 路由名称  
                "{controller}/{action}/{id}", // 带有参数的 URL  
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }  
            );

3、Contorller调用View

public ActionResult Index()  
        {  
            return View("~/Views/CaiGou/AddCaiGou/Index.aspx");  
        }


4、访问

http://localhost:2325/CaiGou/AddCaiGou

“AddCaiGou”为Controller,看起来有点像Action:)名字没取好
全路径http://localhost:2325/CaiGou/AddCaiGou/Index


实例补充:

在分区目录下有项目管理文件夹“SystemManage”,其下有分区名称“Login”,实现方式如下:

image.png

区域注册文件“LoginAreaRegistration.cs”的代码如下:

using System.Web.Mvc;

namespace ABC.Web.SystemManage.Login
{
    public class LoginAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "SystemManage/Login";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Login_default",
                "SystemManage/Login/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new string[] { "ABC.Web.Areas.SystemManage.Login.Controllers" }
                );
        }
    }
}

项目的路由器文件“LoginController.cs”的代码如下:

namespace ABC.Web.Controllers
{
    public class LoginController : Controller
    {
        public ActionResult Index()
        {
            return RedirectToRoute(new { controller = "Login", action = "Index" ,area= "SystemManage/Login" });//可跳到其他controller
        }
    }
}

项目的区域路由器文件“LoginController.cs”的代码如下:

namespace ABC.Web.Areas.SystemManage.Login.Controllers
{

    public class LoginController : Controller
    {
        //创建测试方法类对象
        private ILoginBLL login = new LoginBLL();

        private readonly MF.Core.Logger.Log _logger = MF.Core.Logger.Log.Instance(typeof(LoginController));


        public async Task<ActionResult> Index()
        {
            System.Diagnostics.Debug.WriteLine("Index");
            try
            {
                List<landcom_group> list = await groups.GetGroupAll();
                ViewBag.Group = list;
                _logger.Info("********" + list.Count() + "**********");
            }
            catch (Exception e)
            {
                _logger.Error(e.ToString());
            }
            return View();
        }
   }
}


↑ 上一篇文章:error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 关键词:error,C4430,缺少类型说明符,假定为,int,.. 发布日期:2018/8/1 16:58:43
↓ 下一篇文章:T-sql语句修改SQL Server数据库逻辑名、数据库名、物理名的方法 关键词:T-sql,语句,修改,SQL,Server,数据库逻辑.. 发布日期:2018/8/8 15:21:55
相关文章:
进入ASP.NET MVC的世界 关键词:C#,aspx,ASP.NET,MVC,初识 发布日期:2015-07-29 12:17
HTTP Error 500.23 - Internal Server Error解决方案 检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方案 关键词:HTTP,Error,500.23,,Internal,Server,Error,解决方案,检测.. 发布日期:2016-04-21 19:15
IIS 没有对“*\Temporary ASP.NET Files”的写访问权限 解决 关键词:IIS,Temporary,ASP.NET,Files,写访问权限,解决 发布日期:2015-07-29 11:50
相关目录:.NETVC&C++
我要评论
正在加载评论信息......