2017-08-08 1 views
1

Controller:boucle C# MVC foreach en vue avec le modèle et ViewBag

public ActionResult SelectPlaats() 
     { 

      var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum 
        && x.StartDatum <= x.EindDatum).Select(p => p.Plaats); 
      var two = repository.GetAllPlekken.Select(p => p.Plaatsnummer); 
      ViewBag.vrijeplekken = two.Except(one).ToList(); 

      return View(repository.GetAllPlekken); 
     } 

Vue:

@using Camping.Domain.Entities 
@model IEnumerable<Plek> 

@{ 
    ViewBag.Title = "Beschikbare campingplekken"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<div class="panel panel-default"> 

    <div class="panel-heading"> 
     <h3>Overzicht van alle klanten</h3> 
    </div> 
    <div class="panel-body"> 
     <table class="table table-striped table-condensed table-bordered"> 
      <tr> 
       <th>Plaatsnummer</th> 
       <th>Veldnaam</th> 
       <th>Type</th> 
       <th>Vierkante meter</th> 
       <th>Amp</th> 
       <th>Wifi</th> 
       <th>Water</th> 
       <th>Riool</th> 
       <th>CAI</th> 
       <th>PPN</th> 
       <th>Seizoenplek</th> 
       <th class="text-center">Reserveren</th> 
      </tr> 

      @foreach (var item in Model.Where(x => x.Plaatsnummer == ViewBag.vrijeplekken)) 
      { 
       <tr> 
        <td>@item.Plaatsnummer</td> 
        <td>@item.Veldnaam</td> 
        <td>@item.Type</td> 
        <td>@item.Vierkantemeter</td> 
        <td>@item.Amp</td> 
        <td>@item.Wifi</td> 
        <td>@item.Water</td> 
        <td>@item.Riool</td> 
        <td>@item.CAI</td> 
        <td>@item.PPN</td> 
        <td>@item.Seizoenplek</td> 
        <td class="text-center"> 
         @using (Html.BeginForm("SelectPlek", "Reservering")) 
         { 
          @Html.Hidden("Id", item.Plaatsnummer) 
          <input type="submit" 
            class="btn btn-default btn-xs" 
            value="Reserveren" /> 
         } 
        </td> 
       </tr> 
      } 
     </table> 
    </div> 
</div> 

Nous avons donc le modèle avec tous les détails campingsides + ma demande de camping a. Mais je veux seulement afficher dans cette vue les campingspots gratuits.

J'ai extrait tous les campings disponibles de ma base de données et les ai placés dans mon Viewbag.vrijeplekken qui contient la liste des numéros d'identification (Plaatsnummer).

Je n'arrive pas à comprendre comment obtenir une table avec seulement les campings gratuits mais avec les détails de tous les campings.

J'espère que n'importe qui peut m'aider. Merci d'avance!

+2

Pourquoi voudriez-vous utiliser le ViewBag et pas seulement ajouter que comme une partie de votre modéliser et l'utiliser dans votre boucle? –

Répondre

2

Votre View ne doit concerner que la présentation des données qu'il reçoit dans le modèle (View). Il appartient au contrôleur de sélectionner les données à afficher.

Comme Derek suggère:

public Actionresult SelectPlaats() 
{ 
    var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum && x.StartDatum <= x.EindDatum).Select(p => p.Plaats).ToList(); 
    return View(repository.GetAllPlekken.Where(p => !one.Contains(p.plaatsnummer)).ToList()); 
} 

ou

public Actionresult SelectPlaats() 
{ 
    var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum && x.StartDatum <= x.EindDatum); 
    return View(repository.GetAllPlekken.Except(one).ToList()); 
} 

Et dans votre Vue:

@foreach (var item in Model) 
{ 
    .... 
+0

Merci beaucoup, cela fonctionne comme un charme :) – valheru

+0

Vous êtes les bienvenus :) –

+0

Je ne comprends pas vraiment le code. Comment les campings sont-ils connectés à la liste générale des campings? – valheru