2011-09-23 14 views
5

Mis controladores devuelven una lista de elementos a mis vistas. Necesito manejar el caso cuando no hay elementos para mostrar el mensaje "No hay elementos".Forma correcta de MVC para mostrar el mensaje "sin elementos" a la vista

que puede:

  1. Comprobar list.Count de mi controlador y devolver una vista que contenga solo ese mensaje, o
  2. Comprobar list.Count de la vista en sí, y mostrar el mensaje o los artículos en consecuencia.

He leído que las vistas no deberían tener ninguna lógica, por lo que el modo MVC puro sería el n. ° 1 anterior. ¿Estoy equivocado, o es aceptado en MVC? Muchas gracias.

Respuesta

14

Esa es la responsabilidad de una vista. Compruebe el número del modelo y actuar en consecuencia:

@model IEnumerable<MyViewModel> 

@if (Model.Count() > 0) 
{ 
    ... 
} 
else 
{ 
    <div>Nothing to display here</div> 
} 

Y si se estaba utilizando algún ayudante de cuadrícula como por ejemplo MVCContrib Grid que ni siquiera necesita un if en la vista:

@model IEnumerable<MyViewModel> 
@Html.Grid(Model) 
    .Empty("Nothing to display here") 
    .Columns(column => 
    { 
     ... 
    }) 
) 
3

Algunos pueden estar en desacuerdo, pero creo que es poco realista eliminar la lógica de la vista. Eso es ... siempre que hablemos de lógica de vista.

Si configura un mensaje, aún debe realizar alguna lógica para mostrar ese mensaje o no, especialmente si desea renunciar a los encabezados de una salida vacía que de lo contrario hubiera establecido.

Sugeriría que lo más importante es ser consistente en cómo lo hace ... pero hacerlo tiene sentido para usted. Simplemente intente mantener la lógica restringida a la requerida para mostrar sus datos.

+2

Estoy de acuerdo, detectar cosas como conteo para mostrar "Sin resultados" estaría bien, pero mantén la coherencia. Quiero decir, ¿por qué tenemos Razor si no podemos usarlo en cualquier lugar :)? – Jack

1

La vista puede contener lógica de vista, pero no lógica de negocios. Entonces su opción n. ° 2 debería estar bien.

1

Bueno, tienes razón. su vista no debería tener ninguna lógica, pero su controlador puede. El control y bucle de estado simple de Feeter está perfectamente bien. Personalmente, verificaba el recuento en el nivel de controlador y luego pongo el resultado en viewbag o algo así. Luego verificaría la vista de la bolsa en la vista.

+0

Pero aún tiene lógica en su vista :) – Jack

+0

'Verificación de estado y bucle' son lógicos. –

Cuestiones relacionadas