現在、次のようなフォルダー構造があります。
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
この質問を言葉にするのに苦労しているので、意味が分からない場合はお知らせください。