tag sintaxis net mvc cshtml asp asp.net-mvc-3 dynamic razor anonymous-types expandoobject

asp.net-mvc-3 - net - sintaxis razor mvc 5



ExpandoObject, tipos anĂ³nimos y Razor (4)

Quiero usar un ExpandoObject como el modelo de vista para una vista Razor de tipo ViewPage<dynamic> . Me sale un error cuando hago esto

ExpandoObject o = new ExpandoObject(); o.stuff = new { Foo = "bar" }; return View(o);

¿Qué puedo hacer para que esto funcione?


Intenta configurar el tipo como dynamic

dynamic o = new ExpandoObject(); o.stuff = new { Foo = "bar" }; return View(o);

Revisa esta excelente publicación en ExpandoObject


Me corrigen, @gram tiene la idea correcta. Sin embargo, esta sigue siendo una forma de modificar su concepto.

Editar

Tienes que darle a .stuff un tipo ya que dynamic debe saber con qué tipo de objeto (s) se trata.

.stuff vuelve interno cuando lo configura en un tipo anónimo, por lo que @model dynamic no lo ayudará aquí

ExpandoObject o = new ExpandoObject(); o.stuff = MyTypedObject() { Foo = "bar" }; return View(o);

Y, por supuesto, MyTypedObject :

public class MyTypedObject { public string Foo { get; set; } }


Usando la fuente abierta Dynamitey (en nuget) podrías hacer una gráfica de ExpandoObjects con una sintaxis muy limpia ;

dynamic Expando = Build<ExpandoObject>.NewObject; var o = Expando ( stuff: Expando(foo:"bar") ); return View(o);