Dav*_*ast 5 asp.net asp.net-mvc routing asp.net-mvc-areas asp.net-mvc-3
目前我有一个像这样的文件夹结构:
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,您的控制器是一个名词,而您的操作是一个动词。使用你的例子,你有:
正如您所看到的,如果您可以将 Toolkit + Admin 视为区域 + 子区域,或者将它们合并为一个区域(TookitAdmin),那么您将回到控制器和操作的最初目的。
根据评论,听起来您可能已经决定走这条路。但我想指出的是,您以迂回的方式得出的结论是回到了 MVC 的根源。
顺便说一句,您是否考虑过迁移到 MVC4?它的Web API为 RESTful API 提供了更好的支持,听起来您可能正在尝试使用它。
| 归档时间: | 
 | 
| 查看次数: | 1181 次 | 
| 最近记录: |