2010-02-02 3 views
3

Je suis novice dans les applications Web, MVC et LinqToSql. J'ai créé une application web MVC en utilisant le tutoriel NerdDinner comme guide. J'ajoute maintenant des relations plusieurs-à-plusieurs. Et je cours juste dans les murs à chaque pas. J'ai une liste multi-sélection dans les vues Modifier et Créer. Pour les vues Détail et Liste, je voudrais lister les valeurs sélectionnées.Afficher la liste des valeurs dans la vue détaillée de MVC

J'ai 3 tables: Company, Subcontract et une table de liaison CompanyToSubcontract. J'ai un code qui obtient le guid de mes entreprises sélectionnées de la table CompanyToSubcontract qui est utilisée ailleurs dans mon code. Je ne sais pas comment l'afficher.

Est-ce que je devrais écrire une autre fonction pour obtenir les noms de compagnie de la table de compagnie? Est-ce que je passe la liste des noms à la vue SubcontractDetail et que je la traverse en quelque sorte?

Mêmes questions avec la vue SubcontractIndex. La vue Index est au format tableau, j'aimerais avoir une colonne "Société" qui a une liste de sociétés séparées par des virgules pour chaque ligne de sous-traitance.

[Authorize] 
     public ActionResult Details(string id) 
     { 
      subcontract subcontract = subcontractRepository.GetSubcontract(id); 

      IEnumerable<Guid> cmpny = subcontractRepository.GetSubcontractCompanies(subcontract.subcontract_id); 

      if (subcontract == null) 
       return View("NotFound"); 
      else 
      { 
       return View("Details", subcontract); 
      } 
     } 

[Authorize] 
    public ActionResult Index() 
    { 
     var subcontracts = subcontractRepository.FindAllSubcontracts().ToList(); 
     return View("Index", subcontracts); 
    } 

Répondre

2

Vous avez plusieurs options:
1) Vous pouvez créer une nouvelle classe qui contient sous-traiter & IEnumerable et passer un objet de la nouvelle classe à la vue. C'est une pratique courante dans ASP.NET MVC.

public class MyCustomModelView 
{ 
    public IEnumerable<Guid> Company{ get; set; } 
    public subcontract Subcontract { get; set; } 
} 

Et dans le contrôleur:

return View("Details", new MyCustomModelView(){ 
    Company = cmpny, 
    Subcontract = subcontract }); 

Et ajouter ce nouveau type devrait être le type de votre point de vue.

enter code here 

2) vous pouvez également ajouter le IEnumerable à la collection ViewData comme ceci:

ViewData["Company"] = cmpny; 

Et alors l'accès avec l'indexeur dans la vue

<% foreach(Guid id in (ViewData["Company"] as IEnumerable<Guid>)) { %> 
...Display names... 
<% } %> 

Je personnellement recomand vous les sapins parce que vous n'avez pas besoin de lancer et il est plus propre

+0

Utilisé un customModelView. Je pensais pouvoir le comprendre, mais comment le ferais-je pour l'index? Je passe actuellement une liste de contrats de sous-traitance, pour chaque sous-contrat dans la liste, comment pourrais-je obtenir la liste des entreprises? – RememberME

+0

Si vous avez besoin de la liste d'entreprises pour chaque sous-contrat, vous devez l'obtenir dans le contrôleur et transmettre toutes les données à la vue. Si vous utilisez Linq to Sql ou Entity Framework et qu'il existe une association entre la sous-traitance et la société, vous pouvez naviguer en utilisant les propriétés correspondantes des objets. –

Questions connexes