Это не имеет ничего общего с анонимными типами, имеющими внутренние свойства.
Вполне возможно передать анонимные типы из представления в частичное представление
Сегодня я столкнулся с той же проблемой, и она не имела (напрямую) ничего общего с проблемой передачи анонимных типов и присущих им internal
свойств.
Таким образом, в отношении вопроса OP, ответ @Lucas не имеет значения - даже если обходной путь будет работать .
В вопросе OP анонимный тип передается из представления в сборке X в партиал в сборке X , поэтому проблема, которую обозначил Дэвид Эббо о внутренних свойствах анонимных типов, не имеет значения; типы, скомпилированные для представления, частичный и анонимный тип - все содержатся в одной сборке .
Так что же вызывает внезапную неудачу в передаче анонимного типа из представления в частичное?
По крайней мере, в моей ситуации я обнаружил, что это произошло из-за наличия другого представления в ТАКОЙ ПАПКЕ, которое указывает тип модели, который не может быть разрешен . Представления компилируются во время выполнения, и поэтому это имело бы смысл, поскольку сбой во время выполнения компиляции представлений также означал бы сбой при компиляции динамических типов, и партиал просто получил бы файл object
. Не сразу очевидно, что происходит, но в конкретном примере OP (и моем) это более чем вероятно является причиной проблемы.
Интересно отметить, что если тип модели правильный, но другая часть представления не компилируется, анонимные типы не затрагиваются таким же образом. Это должно быть связано с тем, как Razor разбивает динамическую компиляцию составных частей представления.
После исправления неправильного представления либо перестройте все решение, либо очистите и перестройте проект, прежде чем проверять, исправлено ли оно.
Чтобы убедиться, что вас это снова не поймает, вы можете включить компиляцию ваших представлений Razor во время компиляции, добавив это в свой csproj
файл:
<PropertyGroup>
<MvcBuildViews>true</MvcBuildViews>
</PropertyGroup>