加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – MVC区域路由 – 带文件夹的控制器文件夹

发布时间:2020-12-16 03:22:19 所属栏目:asp.Net 来源:网络整理
导读:目前我有一个像这样的文件夹结构: Area (folder) - Toolkit (folder) - Controllers (folder) - AdminController.cs - Views (folder) - Admin (folder) - Privledges (folder) - Create.cshtml - Edit.cshtml - Delete.cshtml 这转化为 /Toolkit/{controll
目前我有一个像这样的文件夹结构:

Area (folder)
 - Toolkit (folder)
    - Controllers (folder)
        - AdminController.cs
    - Views (folder)
        - Admin (folder)
           - Privledges (folder)
              - Create.cshtml
              - Edit.cshtml
              - Delete.cshtml

这转化为

/Toolkit/{controller}/{action}/{tool}/{id}

将操作设置为像控制器那样基于字符串{tool}参数和传递给操作的参数{id}来提供视图是不是一种不好的做法?

实现我所说的:

private const string FOLDER_PRIVILEGES = "./Privileges/";

    public ActionResult Privileges(string tool,string id = "")
    {
        dynamic viewModel = null;
        ToolViews view; // enum for the views
        // Parse the tool name to get the enum representation of the view requested
        bool isParsed = Enum.TryParse(tool,out view);

        if (!isParsed)
        {
            return HttpNotFound();
        }

        switch (view)
        {
            case ToolViews.Index:
                viewModel = GetIndexViewModel(); // call a function that gets the VM
                break;
            case ToolViews.Edit:
                viewModel = GetEditViewModelById(int.Parse(id)); // sloppy parse
                break;
            default:
                viewModel = GetIndexViewModel();
                break;
        }
        // The folder path is needed to reach the correct view,is this bad?
        // Should I just create a more specific controller even though it would
        // require making about 15-20 controllers?
        return View(FOLDER_PRIVILEGES + tool,viewModel);
    }

当我编写View时,我必须确保路径名用于该文件夹

@Html.ActionLink("Edit","./Toolkit/Admin/Priveleges/Edit","Admin",new { id = item.id })

这似乎是一种不好的做法,因为如果文件夹结构发生变化,则需要大量维护.

但是,如果我必须将操作分解为控制器,那么它们中就会有很多(随着时间的推移,将近20个添加更多).

如果我正在做的是一个不好的做法,那么为这样的路线提供服务的最佳方式是什么?

/Toolkit/Admin/Privileges/Edit/1

我想避免做以下事情:

/Toolkit/Admin/CreatePrivileges/1
/Toolkit/Admin/EditPrivileges/1
/Toolkit/Admin/DeletePrivileges/1

如果我没有任何意义,请告诉我,因为我很难将这个问题用语言表达.

解决方法

我认为你试图强制一个违反其原始意图的MVC惯例.

使用MVC,您的控制器是名词,您的动作是动词.使用您的示例,您有:

>工具包(名词) – 区域

> Admin(名词?) – 子区域? < - 这是一个有点时髦的 >特权(名词) – 控制器 >创建(动词) – 动作
>编辑(动词) – 动作
>删除(动词) – 动作

如您所见,如果您可以将Toolkit Admin视为区域子区域,或将它们组合到一个区域(TookitAdmin),它将使您回到控制器和操作的最初目的.

根据评论,听起来你可能已经决定采用这种方式.但我想指出,你以一种全面的方式得出的结论是回到MVC的根源.

作为旁注,您是否考虑过转向MVC4?它的Web API为RESTful API提供了更好的支持,听起来你可能会尝试这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读