Attualmente ho una struttura di cartelle come questo:MVC Aree Routing - Cartella Regolatore con Folder
Area (folder)
- Toolkit (folder)
- Controllers (folder)
- AdminController.cs
- Views (folder)
- Admin (folder)
- Privledges (folder)
- Create.cshtml
- Edit.cshtml
- Delete.cshtml
che si traduce in
/Toolkit/{controller}/{action}/{tool}/{id}
Si tratta di una cattiva pratica per impostare l'azione di comportarsi un controller simile che serve una vista basata sul parametro {tool} e parametro {id} della stringa passati all'azione?
La realizzazione di ciò di cui sto parlando:
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);
}
Quando scrivo una vista, devo assicurarsi che il nome del percorso viene utilizzato per la cartella
@Html.ActionLink("Edit", "./Toolkit/Admin/Priveleges/Edit", "Admin", new { id = item.id })
Questo sembra essere una cattiva pratica, perché se la struttura della cartella cambia, richiederà molta manutenzione.
Tuttavia, se dovessi suddividere le azioni in controller, ce ne sarebbero molte (quasi 20 con più aggiunte nel tempo).
Se quello che sto facendo è una cattiva pratica, quale sarebbe il modo migliore per servire un percorso simile?
/Toolkit/Admin/Privileges/Edit/1
voglio evitare di nel seguente modo:
/Toolkit/Admin/CreatePrivileges/1
/Toolkit/Admin/EditPrivileges/1
/Toolkit/Admin/DeletePrivileges/1
Si prega di farmi sapere se io non sto facendo alcun senso, perché io sto avendo un momento difficile mettere questa domanda in parole.
Forse sto fraintendendo, ma usando il tuo modello non creerai una funzione separata per restituire il modello di visualizzazione appropriato a seconda dell'enumerazione di 'ToolViews '? L'intero punto di MVC è la convenzione sulla configurazione. Dal momento che la convenzione in MVC è un'azione separata per gestire ogni singola possibilità, sembrerebbe che sia "la migliore pratica" seguire il tuo secondo esempio. IE:/Toolkit/Admin/CreatePrivileges/1. –
Ho deciso che se voglio un URL digeribile ho bisogno di scomporlo in controller più piccoli. Potrebbe essere un po 'fastidioso avere un sacco di controller, ma è meglio di quello che stavo cercando di fare prima. Invece di fare/Toolkit/Admin/CreatePrivileges/1 I have/Toolkit/Privileges/Create/1. Mi sono reso conto che la parte/Admin/non aveva importanza per l'URL una volta che avevo controller multipli e più piccoli. –
Quindi penso che siamo d'accordo? –