Attualmente sto creando un'applicazione ASP.NET MVC. Sto cercando di aggiungere elementi alla proprietà ViewBag per tutte le pagine del mio sito. Per raggiungere questo obiettivo, ho creato un controller di base ereditato da tutti i controller del sito.Esegui metodo asincrono nel vuoto sottoposto a override
da aggiungere alle ViewBag, ho sovrascritto il metodo OnActionExecuting: protected override void OnActionExecuting(ActionExecutingContext filterContext)
So che i metodi OnActionExecuting per MVC5 non sono asincrone, ed è per questo che sto funzionando in questo problema. Ho bisogno di essere in grado di chiamare qualche forma del seguente codice per recuperare gli elementi nuovi e metterli nel ViewBag:
IList<PlaceListItemViewModel> places = await GetLatestPlaces(3);
ViewBag.FooterLatestPlaces = places;
Utilizzando la GetLatestPlaces(3).Result
solo causa un deadlock, quindi questo non è un'opzione.
Qualcuno potrebbe darmi un'opzione su come raggiungere questo obiettivo. Inoltre, non è necessario ignorare il metodo OnActionExecuting, se esiste un altro modo per aggiungere elementi a ViewBag per ogni pagina (oltre a chiamare il codice da ogni singola azione in ogni controller), sono aperto a utilizzare tale metodo .
Purtroppo il metodo GetLatestPlaces non può essere asincrono, poiché utilizza il driver MongoDB 2.0, che è asincrono fino in fondo.
Considerare la riprogettazione in modo da poter chiamare il metodo in un secondo momento ... Non esiste un modo * buono * per chiamare il metodo asincrono in modo sincrono. –
Cosa intendi chiamare il metodo più tardi? Esiste un altro metodo per aggiungere dati al ViewBag (o simili) che possono essere utilizzati all'interno dei file di visualizzazione del rasoio senza aggiungere un mucchio di codice C# alle viste? – Juzzbott