我目前正在構建一個ASP.NET MVC應用程序。我正在嘗試向我的網站中的所有頁面的ViewBag屬性添加項目。爲了達到這個目的,我創建了一個基本控制器,所有我的站點控制器都從中繼承。在被覆蓋的空洞中運行異步方法
爲了增加ViewBag,我已經覆蓋了OnActionExecuting方法:protected override void OnActionExecuting(ActionExecutingContext filterContext)
我知道,MVC5的OnActionExecuting方法不是異步,這就是爲什麼我遇到這個問題。我需要能夠調用某種形式下面的代碼來獲取最新的項目,並把它們放到ViewBag:
IList<PlaceListItemViewModel> places = await GetLatestPlaces(3);
ViewBag.FooterLatestPlaces = places;
使用GetLatestPlaces(3).Result
只是導致死鎖,所以這不是一個選項。
有沒有人可以給我一個選擇,如何實現這一點。它不必重寫OnActionExecuting方法,如果有另一種方法爲每個頁面添加項目到ViewBag(除了從每個控制器中的每一個動作調用代碼),我都願意使用該方法。
不幸的是,我不能將GetLatestPlaces方法設置爲非異步方式,因爲它使用的是MongoDB 2.0驅動程序,它一路是異步的。
考慮重新設計,以便稍後可以調用該方法...實際上沒有任何方法可以同步調用異步方法。 –
你以後說的方法是什麼?有沒有另一種方法可以將數據添加到ViewBag(或類似的),可以在剃鬚刀視圖文件中使用,而不需要將大量的C#代碼添加到視圖中? – Juzzbott