2012-07-07 4 views

risposta

21

Come posso ottenere questo risultato?

Molto facile. La risposta, come nel 99,99% delle domande nel tag asp.net-mvc è sempre la stessa: utilizza i modelli di visualizzazione.

Suppongo che avete il seguente modello di dominio:

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

Quindi, come sempre si inizia definendo un modello di vista in grado di soddisfare i requisiti si desidera implementare in questo punto di vista (che è il raggruppamento di un elenco di Tag modelli di dominio da parte della prima lettera del loro proprietà Name e visualizzare un link):

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

quindi si, ovviamente, avere un controller cui responsabilità è di interrogare il livello dAL al fine di recuperare il dominio m odel, costruire un modello vista ed infine passano questo modello prospettiva della 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); 
    } 
} 

ed infine 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> 
} 

che ovviamente dare il risultato desiderato:

enter image description here

Quindi la prossima volta che incontri qualche difficoltà o problema in ASP.NET MVC racconta a te stesso: Devo usare un modello di vista. Vedi, problema risolto.

+1

Grazie mille per l'ottima risposta ....! :) – Nalaka526

Problemi correlati