Вы можете создать пользовательскую модель, представляющую данные, необходимые для вашего просмотра.
public class UserView
{
public User User{get;set;}
public List<Messages> Messages{get;set;}
}
И затем,
return View(new UserView(){ User = user, Messages = message});
В представлении:
Model.User;
Model.Messages;
ViewBag полезен, потому что он динамически типизирован, поэтому вы можете ссылки в нем непосредственно без кастинга. Однако вы выполняете проверку статического типа во время компиляции.
ViewData может быть полезна, если у вас есть одноразовые типы данных вида и знать тип, и в любом случае будет делать бросок. Некоторым людям нравится сохранять фактический типизированный вид в чистом виде в том смысле, что он представляет только основную модель, другие любят использовать проверку типов во время компиляции и, следовательно, создавать собственные модели, необходимые для представления.