Не могу сказать наверняка, поскольку я никогда не использую динамический, но я подозреваю, что это ситуация, которая не поддерживается механизмом просмотра бритвы. Хотя вы можете иметь динамическую модель и напрямую вызывать свойства для нее.
Например, следующие работы:
@foreach (dynamic uct in new[] { new { Name = "foo" } })
{
<div>@uct.Name</div>
}
но если мы переместим это в какой-то статический метод где-нибудь еще:
@foreach (dynamic uct in Foo.SomeStaticMethod())
{
<div>@uct.Name</div>
}
больше не работает, так как я подозреваю, что бритва автоматически преобразуется в объект.
Вместо использования динамического я бы порекомендовал вам определить пару типов и работать со строгими типами.