目前我有一个这样的文件夹结构:
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);
}
当我写一个视图时,我必须确保路径名称用于文件夹
@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
如果我没有任何意义,请告诉我,因为我很难用语言表达这个问题。