ViewData belongs to dictionary class whereas view bag is the dynamic object. i.e., dictionary class create objects that validate data for viewdata whereas dynamic object validates data for ViewBag.
Also,
The typical typecasting must for viewdata to avoid casting exceptions. Whereas casting is not required aspect for view bag, ie, the string should identify sting type int by int type date with date type there should not be a mismatch in data recognition at validation this known as casting, ViewBag does not require this casting if casting not done in viewdata exception occurs.