Multidesk.be » Forums » .Net » Checked checkboxes opvragen en in List zetten.

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door BoeMan op woensdag 1 mei 2013 om 15:28:36.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Beste,

ik ben een mvc project aan het maken waarbij ik een sponsor aanmaak. Deze moet gericht kunnen adverteren adhv de landgegevens en geslacht van de gebruiker.
Nu heb ik in mijn view code geschreven waarbij de 2 sporten (zwemmen en atletiek) en alle landen en continenten (de landen zijn met een foreign key met de continenten verbonden) in een table gezet worden met checkbox bij dmv een foreach loop.

Nu heb ik problemen om de geselecteerde checkboxen uit mijn view te halen, bij de sporten moet dit normaal nog vrij makkelijk gaan, bij countries+continenten moet ik eerst nog kijken als er een continent aangevinkt is, dat dan al de landen met die FK ook aangevinkt worden.

Het ziet er momenteel zo uit.

Bijlage: 168e93a7f417768d46f0665717529007.jpg

Dit is mijn Advertcontroler, de create functie
CODE
  1.  
  2.         // GET: /Advert/Create
  3.  
  4.         public ActionResult Create()
  5.         {
  6.             ViewBag.SponsorId = new SelectList(db.Sponsors, "SponsorId", "SponsorCompany");
  7.             ViewBag.Sports = new SelectList(db.Sports, "SportID", "SportName");
  8.  
  9.             Advert advert = new Advert();
  10.             advert.Continents = service.GetAllContinents();
  11.             advert.Countries = service.GetAllCountries();
  12.             advert.Sports = service.GetSports();
  13.             return View(advert);
  14.         }
  15.  
  16.         //
  17.         // POST: /Advert/Create
  18.  
  19.  
  20.         [HttpPost]
  21.         public ActionResult Create(Advert advert)
  22.         {
  23.           ViewBag.SponsorId = new SelectList(db.Sponsors, "SponsorId", "SponsorCompany", advert.SponsorId);
  24.           advert.SponsorTypeId = service.sponsorType(advert.Amount);
  25.  
  26.  
  27.             if (ModelState.IsValid)
  28.             {
  29.               db.Adverts.Add(advert);
  30.               db.SaveChanges();
  31.               return RedirectToAction("Index");
  32.             }
  33.  
  34.             return View(advert);
  35.         }
  36.  


De view code, foreach voor Sports en foreach voor Countries+continents
CODE
  1.  
  2.        <div class="editor-label">
  3.             @Html.LabelFor(model => model.SponsorId, "Select sport")
  4.         </div>
  5.  
  6.         <div class="editor-field">
  7.             @foreach (var item in Model.Sports)
  8.             {
  9.                     <tr>
  10.                         <td>
  11.                             <input type="checkbox" id="@item.SportId" name="SelectedSport" value="@item.SportId"/>
  12.                         </td>
  13.                         <td>
  14.                             @item.SportName
  15.                         </td>
  16.                     </tr> <br /> 
  17.             }   
  18.         </div>
  19. .....
  20.  <table>         
  21.                             @foreach (var continent in Model.Continents)
  22.                             {                               
  23.                                     <tr>
  24.                                         <td>
  25.                                             <input type="checkbox" id="@continent.ContinentId" name="@continent.ContinentName" value="@continent.ContinentAbb"/>
  26.                                         </td>
  27.                                         <td>
  28.                                             <b>@continent.ContinentName</b>
  29.                                         </td>
  30.                                         <td>
  31.                                             <img class="flag" src="../../Content/Images/flags/@(continent.ContinentAbb).png" onerror="this.onerror=null;this.src='../../Content/Images/flags/notfound.png'" alt="@continent.ContinentAbb"/>
  32.                                         </td>
  33.                                     </tr>
  34.                                 foreach (var country in Model.Countries)
  35.                                 {
  36.                                     if (country.ContinentId == continent.ContinentId)
  37.                                     {
  38.                                        
  39.                                         <tr>
  40.                                         <td>
  41.                                             <input type="checkbox" id="@country.CountryId" name="@country.CountryName" value="@country.CountryName"/>
  42.                                         </td>
  43.                                         <td class="indent">
  44.                                             @country.CountryName
  45.                                         </td>
  46.                                         <td>
  47.                                             <img class="flag" src="../../Content/Images/flags/@(country.CountryAbb).png" onerror="this.onerror=null;this.src='../../Content/Images/flags/notfound.png'" alt="@country.CountryAbb"/>
  48.                                         </td>
  49.                                         </tr>   
  50.                                      
  51.                                     }
  52.                                 }
  53.                                
  54.                             }
  55.                         </table>
  56.  


En als laatste is dit de Advert class
CODE
  1.  
  2.   public class Advert
  3.   {
  4.     public int AdvertId { get; set; }
  5.     public int SponsorId { get; set; }
  6.     [DisplayName("Amount")]
  7.     public int Amount { get; set; }
  8.  
  9.  
  10.     [DisplayName("Start date")]
  11.     [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yy}")]
  12.     [DataType(DataType.Date)]
  13.     public System.DateTime StartDate { get; set; }
  14.  
  15.     [DisplayName("End date")]
  16.     [DataType(DataType.Date)]
  17.     [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yy}")]
  18.     public DateTime EndDate { get; set; }
  19.  
  20.     public List<Continent> Continents { get; set; }
  21.     public List<Country> Countries { get; set; }
  22.     public List<Sport> Sports { get; set; }
  23.     public Gender Gender { get; set; }
  24.     public Sponsor Sponsor { get; set; }
  25.     public int SponsorTypeId { get; set; }
  26.   }
  27.  


Hopelijk kan iemand me helpen, ik zit nogal vast op dit stuk :)

Mvg Gijs
^ Reactie #1 geschreven door thekid op donderdag 2 mei 2013 om 15:11:23.
thekid's avatar
Multiviteit: 5273
Moderator
Ik kan hier graag meehelpen, maar ik wil iets meer inzicht hebben erin.

Staat dit onder tijdsdruk, of past het voor dit weekend ergens?

*edit*
Ik zou eigenlijk een TreeNode opzetten, als items afhankelijk van een parent aangevinkt kunnen worden.

Het eenvoudige daarna is dan, dat wanneer een checkbox aangevinkt wordt, je dan ook de child items automatisch kunt aanvinken.

Het verschaft ook iets meer overzicht , je hoeft niet door alle verzamelde items te scrollen, om dan je echte regio uit te zoeken. Het laat ook toe om dan in de toekomst nog regio's in de landen te voorzien, met eenzelfde code

Met de tree kan ik je allesinds helpen, met de verwerking in de view niet zo direct, aangezien ik je code niet heb :)
Deze tekst werd het laatst bewerkt voor 68.31 % door thekid op donderdag 2 mei 2013 om 19:35:40.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door BoeMan op donderdag 2 mei 2013 om 19:33:27.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Hey thekid

We hebben eigenlijk een zelfopgelegde deadline tegen morgen, maar ik blijf er vanavond wat aan prullen zodat ik morgen wat kan laten zien. Er zullen zeker betere oplossingen zijn als de mijne(als ik er een vind) :)
Als je mij in het weekend zou kunnen helpen met dit probleem zou ik je uiteraard zeer dankbaar zijn!
Ik heb het hele project maar nie gepost, het is namelijk nogal groot, we werken er met 6 aan. Maar ik ben verantwoordelijk om sports, country, continent, sponsor en advert allemaal samen te laten functioneren bij een create.

*edit
Moest je vanavond tijd hebben zou uiteraard ook mooi zijn :D

Mvg Gijs
Deze tekst werd het laatst bewerkt voor 5.88 % door BoeMan op donderdag 2 mei 2013 om 19:34:15.
^ Reactie #3 geschreven door thekid op donderdag 2 mei 2013 om 19:37:19.
thekid's avatar
Multiviteit: 5273
Moderator
zie eens of mijn vorig antwoord helpt (de edit). Indien niet, kunnen we dat misschien best over PM afhandelen
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #4 geschreven door BoeMan op donderdag 2 mei 2013 om 19:44:42.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Ik heb een TreeNode nog niet gebruikt, ik zou niet direct weten hoe het moet maar wil het graag leren :)
Mijn landen zijn nu wel met een FK verbonden aan het betreffende continent.
Misschien is PM hier wel de beste oplossing, natuurlijk kan ik altijd meer code geven ;)
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen