Salve a tutti.
Da qualche settimana sto approcciando al linguaggio seguendo un corso online. Per fare pratica ho pensato di realizzare una semplice piattaforma web di consultazione dei comuni italiani, delle province e delle regioni. Però sto avendo un problema che vorrei sottoporvi.
Ho creato un controller di nome ComuniController all'interno del quale ho definito tre action:
- Index() - si occupa di passare alla View una lista di ViewModel contenente l'elenco di tutti i comuni da visualizzare in varie pagine a blocchi di 20;
- Dettaglio(string id) - si occupa di selezionare un sigolo comune tramite il suo id e passare il ViewModel alla corrispondente View per la visualizzarne il contenuto;
- Infine ho creato una terza action che ha lo stesso funzionamento della Index() con la sola differenza che quest'ultima effettua una selezione dei comuni appartenenti ad una stessa provincia che passo come parametro, perciò ho pensato di creare un overloading della Index() tramite la direttiva ActionName, facendo condividere la stessa View ad entrambe le action considerato che l'output è assolutamente identico per entrambe.
Ecco il codice:
public async Task<IActionResult> Index()
{
// RESTITUISCE L'ELENCO DI TUTTI I COMUNI
List<ComuneViewModel> comuni = await comuneService.GetComuniAsync();
return View(comuni);
}
public async Task<IActionResult> Dettaglio(string id)
{
// RESTITUISCE UN SOLO COMUNE CON CODICE id
ComuneViewModel comune = await comuneService.GetComuneAsync(id);
return View(comune);
}
// QUI HO CREATO L'OVERLOADING DI Index() TRAMITE LA ActionName ByProvincia
[ActionName("ByProvincia")]
public IActionResult Index(string id)
{
// RESTITUISCE L'ELENCO DEI COMUNI APPARTENENTI ALLA PROVINCIA CON CODICE id
List<ComuneViewModel> comuni = await comuneService.GetComuniByProvinciaAsync(id);
return View(comuni);
}
Così come ho implementato l'overloading, non riesco a far condividere la stessa View Index alle due action Index, ma viene generato un errore a run-time quando invoco l'overloading della
Index(string id) poiché essa va a cercare la sua specifica View. Di seguito l'errore restituito:
An unhandled exception occurred while processing the request.
InvalidOperationException: The view 'ByProvincia' was not found. The following locations were searched:
/Views/Comuni/ByProvincia.cshtml
/Views/Shared/ByProvincia.cshtml
Ovviamente potrei risolvere il problema andando a scrivere la corrispondente View
ByProvincia, ma ciò non sarebbe una buona pratica dal momento che quest'ultima View avrebbe tutto il codice identico alla View di Index().
Spero di aver ben spiegato il problema e ringrazio anticipatamente chi vorrà aiutarmi a risolvere l'arcano.
Grazie, Vincenzo Camporeale
Modificato da Kampus il 18 aprile 2020 12:39 -