"А ViewBag хранит данные в рамках одного запроса. Но это же меню, которое будет доступно всегда, при различных запросах и переходах между страницами. Поэтому указал выше TempData и Session." Вообще, TempData живет еще меньше:) Session это конечно хорошо, но она передается также и от клиента на сервер, гонять туда-сюда данные меню с возможностью их подмены нехорошими людьми нехорошо. Я бы сделал так - создал отдельный метод контроллера и закешировал его на максимальное время
public class MenuController{
[OutputCache(Duration = 100500)]
public ActionResult Menu(){
...
}
}
public class MenuController{
[OutputCache(Duration = 100500)]
public ActionResult Menu(){
...
}
}
а дальше использовал бы https://api.jquery.com/load/:
$("left-menu-container").load("@Url.Action("Menu","MenuController")");