2012-07-07 73 views

Respuesta

21

¿Cómo puedo lograr esto?

Muy fácil. La respuesta, como en el 99,99% de las preguntas en la etiqueta asp.net-mvc es siempre la misma: use los modelos de vista.

que se supone que tiene el siguiente modelo de dominio:

public class Tag 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Así que como siempre se inicia mediante la definición de un modelo de vista que cumpla con los requisitos que desea implementar en este punto de vista (que es agrupar una lista de Tag modelos de dominio por la primera letra de su propiedad Name y mostrar un enlace):

public class TagViewModel 
{ 
    public string Letter { get; set; } 
    public IEnumerable<Tag> Tags { get; set; } 
} 

entonces tendrán obviamente un controlador que tiene la responsabilidad de consultar su capa DAL con el fin de buscar el dominio m, Odel, construir un modelo de vista y, finalmente, pasar esta vista del modelo a la vista:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     // Get the domain model 
     var tags = new[] 
     { 
      // Guess this comes from a database or something 
      new Tag { Id = 1, Name = "Apple" }, 
      new Tag { Id = 2, Name = "Ant" }, 
      new Tag { Id = 3, Name = "Car" }, 
      new Tag { Id = 4, Name = "Sky" }, 
      new Tag { Id = 5, Name = "Sea" }, 
      new Tag { Id = 6, Name = "Sun" }, 
     }; 

     // now build the view model: 
     var model = tags.GroupBy(t => t.Name.Substring(0, 1)).Select(g => new TagViewModel 
     { 
      Letter = g.Key, 
      Tags = g 
     }); 

     return View(model); 
    } 
} 

y, finalmente, una vista:

@model IEnumerable<TagViewModel> 

@foreach (var item in Model) 
{ 
    <h2>@item.Letter</h2> 
    <ul> 
     @foreach (var tag in item.Tags) 
     { 
      <li> 
       <!-- Please notice the usage of an HTML helper to generate 
        the anchor instead of the hardcoded url shown in your 
        question which is very bad 
       --> 
       @Html.ActionLink(
        tag.Name, 
        "Post", 
        "Tag", 
        new { id = tag.Id }, 
        null 
       ) 
      </li> 
     } 
    </ul> 
} 

que obviamente dará el resultado deseado:

enter image description here

Así que la próxima vez que encuentre alguna dificultad o problema en ASP.NET MVC dígale a usted mismo: Debo usar un modelo de vista. Ver, problema resuelto.

+1

Muchas gracias por la excelente respuesta ....! :) – Nalaka526

Cuestiones relacionadas