2011-11-02 15 views
8

Quiero pasar dos valores de la acción del controlador a asp.net MVC 3 Razor view. Estoy haciendo así en método de acción:pasando el objeto anónimo para ver

var model = new { reportid = rid, refno = refernumber}; 
return View(model); 

pero cuando intento acceder a ella a la vista de esta manera:

@Model.reportid 

consigo, objeto no contiene la propiedad ReportID

Cómo ¿Puedo pasar múltiples valores sin usar viewbag?

+0

Utilice la viewbag o crear un modelo de vista – RickAndMSFT

Respuesta

15

Bueno, le recomiendo que use la clase ViewModel. Pero si por alguna razón usted tiene fobia a las clases ViewModel adicionales, puede utilizar C# característica llamada Tupla

var model = Tuple.Create(firstObject, secondObject) 

y luego su vista será de tipo tupla, por ejemplo

@model Tuple<int, string> 

y puede acceder a ellos de esta manera

@Model.Item1 

Y a continuación, puede felicitarse, que han logrado meterse con buen sentido oculto :)

+1

Me encanta cómo algo tan feo puede ser tan hermoso :) –

3

Está pasando un objeto anónimo a la vista, pero los objetos anónimos son internos al conjunto en el que están definidos, por lo que no puede hacer eso.

Si no quiere definir su propio modelo o usar ViewState y ViewBag, y aún desea usar objetos anónimos, la publicación this le sería útil.

2

Otra forma de lograr esta tarea es utilizar ExpandoObject.

dynamic model = new System.Dynamic.ExpandoObject(); 
model.reportid = 123 
model.refno = 456; 

Establecer el tipo de vista del modelo de dynamic:

@model dynamic 

@Model.reportid 
@Model.refno 
Cuestiones relacionadas