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; }
}
Puedes hacerlo con el método de extensión mencionado en esta pregunta:
El tipo dinámico anónimo en Razor causa la excepción RuntimeBinderException
Entonces su código de controlador se vería así:
dynamic o = new ExpandoObject();
o.Stuff = new { Foo = "Bar" }.ToExpando();
return View(o);
Y luego tu punto de vista:
@model dynamic
@Model.Stuff.Bar