maquinilla de afeitar con la clase de modelo de tipo anónimo. ¿Es posible?

Quiero crear una vista usando una plantilla de afeitar, pero no quiero escribir una clase para el modelo, porque en muchas vistas tendré muchas consultas que me devolverán diferentes modelos.

Por ejemplo, tengo una consulta linq:

from p in db.Articles.Where(p => p.user_id == 2) select new { p.article_id, p.title, p.date, p.category, /* Additional parameters which arent in Article model */ }; 

Necesito escribir una vista para esta consulta. Esta consulta devuelve un artículo.

Ahora no sé cómo debería ser una definición de modelo.

Traté de usar esta deffinition:

 @model System.Collections.IEnumerable 

Pero luego tuve un error que no existe en el tipo de objeto.

* CS1061: ‘object’ no contiene una definición para ‘addition_field’ y no se pudo encontrar ningún método de extensión ‘addition_field’ que aceptara un primer argumento de tipo ‘object’ *

Este es mi modelo para el cual no quiero escribir un próximo modelo. Por supuesto

La respuesta corta es que no se admite el uso de tipos anónimos , sin embargo, existe una solución ExpandoObject , puede usar un ExpandoObject

Establezca su modelo en @model IEnumerable

Luego en el controlador

 from p in db.Articles.Where(p => p.user_id == 2) select new { p.article_id, p.title, p.date, p.category, /* Additional parameters which arent in Article model */ }.ToExpando(); ... public static class Extensions { public static ExpandoObject ToExpando(this object anonymousObject) { IDictionary anonymousDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(anonymousObject); IDictionary expando = new ExpandoObject(); foreach (var item in anonymousDictionary) expando.Add(item); return (ExpandoObject)expando; } } 

Creo que esta es una solución aún mejor:

http://buildstarted.com/2010/11/09/razor-without-mvc-part-iii-support-for-nested-anonymous-types/

Esto permite tipos anónimos nesteds, que la solución de objeto expandido antes mencionada no manejará.

Parece que no puede pasar tipos anónimos, pero si solo quiere los valores del tipo, puede pasar un enumerable de una matriz de objetos para ver.

Ver:

 @model IEnumerable @{ ViewBag.Title = "Home Page"; } 
@foreach (var item in Model) { }
@item[0].ToString() @item[1].ToString()

Controlador:

 using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; namespace ZZZZZ { public class HomeController : Controller { public ActionResult Index() { List list = new List { new object[] { "test1", DateTime.Now, -12.3 } }; return View(list); } } }