ASP.NET MVC pasando el resultado de la consulta del controlador para ver

¿Cómo imprimir el resultado de la consulta en la página Ver para ASP.NET MVC? mi código es:

public ActionResult Index()
{
            var list = from m in db.MenuTables
                       select m.MenuName;

            return View(list);
        }

Ahora, ¿qué debo escribir para imprimir el resultado de esta consulta en Ver página?

preguntado el 08 de marzo de 13 a las 21:03

4 Respuestas

Personalmente, me acostumbraría a tener ViewModels y luego escribiendo fuertemente su Vista, a ese modelo.

El model expondrá SÓLO LOS DATOS que desea mostrar. Nada más y nada menos. Así que supongamos que desea mostrar el nombre, el precio y algunos otros metadatos.

Pseudocódigo:

//View Model
public class MenuItem
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public bool IsVegetarian { get; set; ]
}

public class IndexViewModel
{
    public IList<MenuItem> MenuItems { get; set; }
    public string MaybeSomeMessage { get; set; }
}

//in Controller
public ActionResult Index()
{
    // This gets the menu items from your db, or cache or whatever.
    var menuItemsFromDb = GetMenuItems(); 


    // Let's start populating the view model.
    IndexViewModel model = new IndexViewModel();    

    // Project the results to your model.
    IList<MenuItems> menuItems = null;
    if (menuItemsFromDb != null)
    {
        model.MenuItems = (from menuItem in menuItemsFromDb
                           select new MenuItem() {
                               Name = menuItem.Name,
                               Price = menuItem.Price,
                               IsVegetarian = menuItem.IsVegetarian
                           }).ToList();
    }
  
    // Anything else...
    model.MaybeSomeMessage = "Hi There!";

    return View(model);
}

//in View
@model IndexViewModel

<h3>@Model.MaybeSomeMessage</h3>
<ul>
    @foreach(var item in Model.MenuItems)
    {
        <li><a href="#">@item.Name</a> - $ @item.Price</li>
    }
</ul>

etc ..

Tenga en cuenta que me he saltado algunas comprobaciones de errores, etc.

El punto: solo pasa lo que necesitas.

Al principio, puede pensar que se trata de mucho más código del necesario. La mejor respuesta que puedo sugerir a ese pensamiento es que, a la larga, se agradecerá a sí mismo por adquirir el hábito de esto porque la vista solo debe saber sobre el exacto datos que requiere.

Nada más y nada menos. Enviar la menor cantidad de datos significa que tiene una vista muy liviana y simple que hará que su soporte/depuración sea mucho mejor. A continuación, podrá realizar pruebas unitarias de sus controladores con mucha más inteligencia y astucia, cuando llegue a eso.

Respondido 03 ago 22, 10:08

Asumiendo que list es un IEnumerable de cadenas (es decir, que MenuName es una cadena).

En su opinión, acepte el modelo IEnumerable<string>

@model IEnumerable<string>

y luego enumerarlo

@foreach( string s in Model )
{
 <div>
  @s
 </div>
}

respondido 08 mar '13, 21:03

Lo primero que desea hacer es llamar a ToList() o, de lo contrario, podría estar ejecutando la misma consulta SQL varias veces.

   public ActionResult Index()
   { 
        var list = (from m in db.MenuTables
                   select m.MenuName).ToList();

        return View(list);
    }

En segundo lugar, no dejaría pasar una lista completa como esa. Debes crear un ViewModel. Eso le permitirá pasar más datos más adelante con un esfuerzo menor.

     public ActionResult Index()
     {
        var model = new IndexModel();
        model.Tables = db.MenuTables.ToList();
        model.AnotherValue = "MENUS";

        return View(model);
     }

Ahora que estamos en la vista, deberá configurar el modelo e iterar la tabla.

 @model IndexModel

 <h3>@Model.AnotherValue</h3>
 <ul>
 @foreach( var table in Model.Tables) {
     <li>@table.Name<li>
 }
 </ul>

respondido 08 mar '13, 21:03

     public ActionResult Index()
    {
        var list = from m in db.MenuTables
                   select m.MenuName;

        return View(list);
    }

    //In View

    @model IEnumerable<ProjectName.models.MenuTables>

    @foreach(var item in Model)
    { 
        @item.Field_Name
    }

respondido 09 nov., 16:11

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.