Questo non ha nulla a che fare con i tipi anonimi che hanno proprietà interne
È perfettamente possibile passare tipi anonimi da una vista a una vista parziale
Oggi ho riscontrato lo stesso problema e non aveva nulla (direttamente) a che fare con il problema del passaggio di tipi anonimi e delle loro internal
proprietà intrinseche .
In quanto tale, in relazione alla domanda dei PO, la risposta di @Lucas è irrilevante, anche se la soluzione alternativa funzionerà .
Nella domanda OPs, un tipo anonimo viene passato da una vista nell'assembly X a una parziale nell'assembly X , quindi il problema che David Ebbo ha delineato delle proprietà interne per i tipi anonimi non ha conseguenze; i tipi compilati per la vista, il tipo parziale e il tipo anonimo sono tutti contenuti nello stesso assembly .
Allora cosa sta causando l'improvviso mancato passaggio di un tipo anonimo da una vista a una parziale?
Almeno nella mia situazione, ho scoperto che era dovuto alla presenza di un'altra vista nella STESSA CARTELLA che specifica un tipo di modello che non può essere risolto . Le viste vengono compilate in fase di esecuzione, quindi avrebbe senso in quanto un errore in fase di esecuzione nella compilazione delle viste significherebbe anche un errore nella compilazione dei tipi dinamici e il parziale riceverebbe semplicemente un object
. Non è immediatamente ovvio cosa sta succedendo, ma nell'esempio specifico dei PO (e nel mio) questa è più che probabile la causa del problema.
È interessante notare che se il tipo di modello è corretto ma un'altra parte della vista non viene compilata, i tipi anonimi non vengono influenzati allo stesso modo. Questo deve dipendere dal modo in cui Razor suddivide la compilazione dinamica delle parti componenti della vista.
Dopo aver corretto la vista offensiva, ricostruire l'intera soluzione o pulire e ricostruire il progetto prima di verificare se è stato risolto.
Per assicurarti di non essere più sorpreso da questo, puoi abilitare la compilazione in fase di compilazione delle tue viste Razor aggiungendo questo al tuo csproj
file:
<PropertyGroup>
<MvcBuildViews>true</MvcBuildViews>
</PropertyGroup>