Isso não tem nada a ver com tipos anônimos com propriedades internas
É perfeitamente possível passar tipos anônimos de uma visão para uma visão parcial
Eu encontrei o mesmo problema hoje e não tinha nada (diretamente) a ver com o problema de passar tipos anônimos e suas internal
propriedades inerentes .
Assim, em relação à pergunta dos POs, a resposta de @Lucas é irrelevante - embora a solução alternativa funcione .
Na questão de OPs, um tipo anônimo está sendo passado de uma visão no assembly X para um parcial no assembly X , portanto, o problema que David Ebbo descreveu das propriedades sendo internas para tipos anônimos não tem consequência; os tipos compilados para a visão, o tipo parcial e o tipo anônimo estão todos contidos no mesmo assembly .
Então, o que está causando a falha repentina de passar um tipo anônimo de uma exibição para uma parcial?
Pelo menos na minha situação, descobri que era devido a ter outra visualização na MESMA PASTA que especifica um tipo de modelo que não pode ser resolvido . As visualizações são compiladas em tempo de execução e, portanto, faria sentido, uma vez que uma falha em tempo de execução para compilar as visualizações também significaria uma falha ao compilar os tipos dinâmicos e o parcial simplesmente receberia um object
. Não é imediatamente óbvio o que está acontecendo, mas no exemplo específico de OPs (e no meu) essa é a causa mais provável do problema.
É interessante notar que se o tipo de modelo estiver correto, mas outra parte da visualização não compilar, os tipos anônimos não serão afetados da mesma maneira. Isso deve ser explicado como o Razor divide a compilação dinâmica das partes componentes da visualização.
Depois de corrigir a visão ofensiva, reconstrua toda a solução ou limpe e reconstrua o projeto antes de verificar se foi corrigido.
Para garantir que você não seja pego por isso novamente, você pode habilitar a compilação em tempo de compilação de suas visualizações do Razor adicionando isto ao seu csproj
arquivo:
<PropertyGroup>
<MvcBuildViews>true</MvcBuildViews>
</PropertyGroup>