2012-02-16 39 views
17

Entiendo por varias otras preguntas relacionadas here y here entre otras, que no puede pasar objetos tipeados anónimamente desde el controlador a la vista porque los tipos anónimos se definen con el acceso interno . La vista y el código del controlador se compilan en diferentes montajes de manera de intentar usarlo como resultado de este error ...Pasar objetos anónimos desde una vista a una vista parcial

objeto no contiene una definición para 'foo'

Eso está muy bien y que pueda acepta eso, aunque fue molesto al principio. Hay suficientes soluciones sugeridas para apaciguarme.

Sin embargo, pensé que todavía podría pasar un tipo anónimo desde una vista a una vista parcial porque, al ser vistas, se compilarían en el mismo ensamblaje.

Razor Ver código ...

@Html.Partial("Partial1", new { foo = "Something", bar = "Something else" }) 

y el código de la vista parcial para "parcial1"

@model dynamic 

<h1>@Model.foo</h1> 
<span>@Model.bar</span> 

Lo curioso es que este trabajaba en el comienzo de un desarrollo en una nuevo proyecto de MVC, pero a medida que agregué más vistas simplemente dejó de funcionar y ahora me da el mismo error que mencioné anteriormente.

Es como si hubiera alcanzado un umbral donde la vista y la vista parcial ya no se compilan en el mismo conjunto. Pero solo estoy adivinando.

Me pregunto si alguien puede arrojar algo de luz sobre esto.

+0

He tenido exactamente este problema. La dinámica funcionaba con parciales, y de repente se detenía. –

+0

Nunca descubrí por qué. Tuve que dejar de usar tipos dinámicos. Debido a que había una solución tan simple que no podía justificar más tiempo dedicado a investigarla –

+0

¡Estoy teniendo exactamente el mismo problema! ¿Alguien ha encontrado una explicación todavía? –

Respuesta

2

Nunca pude explicar por qué esto estaba funcionando y luego se detuvo, así que simplemente tuve que recurrir al uso de definiciones de tipos con nombre. No es el final del mundo, sino decepcionante. Este tipo de cosas se adapta perfectamente al uso de tipos dinámicos.

+1

Esa fue exactamente mi opinión. Fue una distracción demasiado grande y no justificó mi tiempo, dado que tenía un trabajo alternativa (es decir, muy tipado). –

11

No sé el motivo por el que dejó de funcionar, pero aquí está la solución.

Uso @ViewData.Eval("foo") en lugar de @Model.foo

y retirar la línea dinámica @Model. No hay necesidad de eso.

+2

Bueno, he leído mucho sobre este tema angustioso. Gente que escribe extensiones y todo tipo. Esta es una solución realmente fácil. – Justin

Cuestiones relacionadas