¿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:

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.
Muchas gracias por la excelente respuesta ....! :) – Nalaka526