У анонимного типа есть некоторые проблемы с доступностью, в которых dynamic
через провайдера c # пытается уважать доступность. Анонимный тип в другом модуле не доступен (и помните, что страницы MVC обычно компилируются в другой модуль), следовательно, нет свойств.
IIRC, однако, это на самом деле исправлено в более позднем патче MVC - я, кажется, помню, что ударил его, когда моя локальная машина была на оборотах выше, чем наш dev-сервер, что означало: она работала локально на более высокой ревизии, но не см Вы описываете на dev-сервере.
ExpandoObject
не страдает от этого, потому что он не использует провайдера c # (вместо него реализуется IDynamicMetaObjectProvider
) и не имеет понятия доступности (он просто отображает имена членов в словарь).