2011-04-13 5 views
7

¿alguien me puede decir lo que estoy haciendo mal? :-)Rellenar un tipo anónimo en ViewBag causando problemas de carpeta de modelo

que tienen esta consulta sencilla:

var sample = from training in _db.Trainings 
       where training.InstructorID == 10 
       select new { Something = training.Instructor.UserName }; 

y paso esta a ViewBag.

ViewBag.Sample = sample; 

entonces quiero acceder a él en mi opinión así:

@foreach (var item in ViewBag.Sample) { 
    @item.Something 
} 

y me sale mensaje de error 'objeto' no contiene una definición de 'algo'. Si pongo allí solo @item, obtengo el resultado { Something = SomeUserName }

Gracias por su ayuda.

Respuesta

16

Esto no se puede hacer. ViewBag es dinámico y el problema es que el tipo anónimo se genera como interno. Yo le recomendaría el uso de una vista de modelo:

public class Instructor 
{ 
    public string Name { get; set; } 
} 

y luego:

public ActionResult Index() 
{ 
    var mdoel = from training in _db.Trainings 
       where training.InstructorID == 10 
       select new Instructor { 
        Name = training.Instructor.UserName 
       }; 
    return View(model); 
} 

y en la vista:

@model IEnumerable<Instructor> 
@foreach (var item in ViewBag.Sample) { 
    @item.Something 
} 
+1

+1 - Observe cómo está la selección de un nuevo 'Instructor' una tipo concreto - no es un tipo anónimo. De esa manera él puede acceder a la información dentro del objeto. –

+0

Ayudó. Gracias por responder. –

Cuestiones relacionadas