login  Naam:   Wachtwoord: 
Registreer je!
 Forum

ASP.net/MVC2 edit en delete action maken.

Offline Martijn2008 - 03/09/2010 11:49
Avatar van Martijn2008PHP beginner Hi,

Zoals ik al in mijn vorige forum post had aangegeven, ben ik me aan het verdiepen in het MVC2 framework van ASP.net. Ik heb inmiddels een dataconnectie gelegd tussen de database en de applicatie. Ik heb een overview van de data gemaakt en een detail view.

Momenteel ligt mijn focus op het schrijven van de "add" en "edit" action. Ik vind dit tamelijk lastig. Ik heb er al een tutorial over gelezen, maar het wil me gewoon niet echt lukken. Overigens ben ik een beginner met LinQ to SQL.

Is er misschien een gevorderde ASP.net/MVC programmeur op dit forum, die mij dit zou kunnen/willen uitleggen??

Dank je wel alvast!

Martijn

13 antwoorden

Gesponsorde links
Offline Abbas - 03/09/2010 19:37
Avatar van Abbas Gouden medaille

Crew .NET
Wat is er dan precies dat je niet snapt? Geef eens wat code die je bijvoorbeeld niet begrijpt. ;)
Offline Martijn2008 - 03/09/2010 20:28
Avatar van Martijn2008 PHP beginner Ik snap voornamelijk de manier van het gebruik van models en LinQ to SQL niet goed. Ik bedoel hiermee niet dat ik de werking niet begrijp of de functie van een model. Meer de manier van hoe ik deze benader en gebruik. Evenzo LinQ to SQL. Ik vind het maar een vaag taaltje. Ik heb toch niet voor niks SQL geleerd??

  1. //
  2. // POST: /StoreManager/Edit/5
  3.  
  4. [HttpPost]
  5. public ActionResult Edit(int id, FormCollection formValues)
  6. {
  7. var album = storeDB.Albums.Single(a => a.AlbumId == id);
  8.  
  9. try
  10. {
  11. //Save Album
  12.  
  13. UpdateModel(album, "Album");
  14. storeDB.SaveChanges();
  15.  
  16. return RedirectToAction("Index");
  17. }
  18. catch
  19. {
  20. var viewModel = new StoreManagerViewModel
  21. {
  22. Album = album,
  23. Genres = storeDB.Genres.ToList(),
  24. Artists = storeDB.Artists.ToList()
  25. };
  26.  
  27. return View(viewModel);
  28. }
  29. }
Offline Abbas - 03/09/2010 23:26
Avatar van Abbas Gouden medaille

Crew .NET
LinQ staat voor Language Integrated Query. Het komt erop neer dat instructies zoals de gebruikelijke SQL-instructies nu in C# verweven zitten. Ze zijn toepasbaar op arrays, lijsten, xml en ook op databases natuurlijk. SQL heb je niet voor niets geleerd want de normale vorm van LinQ is niet zo héél verschillend van de standaard instructies:

  1. //standaard
  2. String strSql = "SELECT naam FROM leden WHERE id = 1";
  3.  
  4. //LinQ
  5. String naam = from l in db.Leden where id == 1 select l.Naam;

Hetgeen er iets raarder uitziet zijn Lambda-expressies zoals in de code die je gaf. Toegepast op de eenvoudige query geeft dit:

  1. String naam = db.Leden.Single(l.Id.Equals(1)).Naam;

Dergelijke functies verwachten soms als parameter een predicate. Dit is een functie om te zien of een element aan de opgegeven voldoet. In bovenstaand geval moet het Id van een lid gelijk zijn aan 1. Je zou ook First() kunnen gebruiken. Die geeft het eerst gevonden element terug. Bij Single() wordt er verwacht dat er maar 1 resultaat zal gevonden worden, bij meerdere gevonden zal er een Exception gegooid worden. Zover de LinQ! 

Wat snap je niet aan het concept van de benadering van een Model? Je maakt een Controller en een gepaste View. In de controller zorg je voor de juiste methodes en that's it eigenlijk. 
Offline Martijn2008 - 04/09/2010 00:23 (laatste wijziging 04/09/2010 00:35)
Avatar van Martijn2008 PHP beginner Voornamelijk het opslaan, bewerken en verwijderen van gegevens uit de database. Ik denk dat het gemakkelijker is als ik je gewoon mijn code geef, waarschijnlijk geeft dat meer inzicht.

De database:
  1. CREATE DATABASE cms;
  2.  
  3. USE cms;
  4.  
  5. CREATE TABLE page
  6. (
  7. pid INT NOT NULL PRIMARY KEY IDENTITY,
  8. title VARCHAR(255) NOT NULL,
  9. message VARCHAR(MAX) NOT NULL
  10. );


Het model:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace cms.Models
  7. {
  8. public class PageModel
  9. {
  10. cms_LINQDataContext db = new cms_LINQDataContext();
  11.  
  12. public IQueryable<page> getAllPages()
  13. {
  14. return db.pages;
  15. }
  16.  
  17. public page getPage(int id)
  18. {
  19. return db.pages.SingleOrDefault(d => d.pid == id);
  20. }
  21. }
  22. }


De controller:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.UI;
  7. using cms.Models;
  8.  
  9. namespace cms.Controllers
  10. {
  11. public class mypageController : Controller
  12. {
  13. //
  14. // GET: /mypage/
  15. PageModel p = new PageModel();
  16.  
  17. public ActionResult Index()
  18. {
  19. var r = p.getAllPages().ToList();
  20. return View("Index", r);
  21. }
  22.  
  23. //
  24. // GET: /mypage/Details/5
  25.  
  26. public ActionResult Details(int id)
  27. {
  28. page d = p.getPage(id);
  29. if (d == null)
  30. return View("NotFound");
  31. return View(d);
  32. }
  33.  
  34. //
  35. // GET: /mypage/Create
  36.  
  37. public ActionResult Create()
  38. {
  39. return View();
  40. }
  41.  
  42. //
  43. // POST: /mypage/Create
  44.  
  45. [HttpPost]
  46. public ActionResult Create(FormCollection collection)
  47. {
  48. try
  49. {
  50. // TODO: Add insert logic here
  51.  
  52. return RedirectToAction("Index");
  53. }
  54. catch
  55. {
  56. return View();
  57. }
  58. }
  59.  
  60. //
  61. // GET: /mypage/Edit/5
  62.  
  63. public ActionResult Edit(int id)
  64. {
  65. page d = p.getPage(id);
  66. if (d == null)
  67. return View("NotFound");
  68. return View(d);
  69. }
  70.  
  71. //
  72. // POST: /mypage/Edit/5
  73.  
  74. [HttpPost]
  75. public ActionResult Edit(int id, FormCollection collection)
  76. {
  77. try
  78. {
  79. // TODO: Add update logic here
  80.  
  81. return RedirectToAction("Index");
  82. }
  83. catch
  84. {
  85. return View();
  86. }
  87. }
  88. }
  89. }


Offline Abbas - 04/09/2010 01:09
Avatar van Abbas Gouden medaille

Crew .NET
Ik heb die tutorial die je in het begin aangaf eens gelezen en alles staat daar toch duidelijk uitgelegd? De Controllers die moeten aangemaakt worden en de Views die daaraan gelinkt worden. Heel het systeem van de DB en de edmx-file. Noem maar op, alles staat er heel uitgebreid in uitgelegd.

Je geeft nu je code die je hebt, wat is er dat er nog moet veranderen dat je niet snapt? Als je heel de tutorial volgt (je hoeft hem niet na te maken maar practice makes perfect) dan wordt de kracht van MVC wel duidelijk! 
Offline Martijn2008 - 04/09/2010 12:01
Avatar van Martijn2008 PHP beginner De post methode van de view action wil niet lukken. Ik kan geen p.page.Single(a => p.pid == id); doen.

Hieronder een voorbeeld hoe het zou moeten volgens de tut op ASP.net.

  1. // Source: http://www.asp.net/mvc/tutorials/mvc-music-store-part-4
  2. // POST: /StoreManager/Create
  3.  
  4. [HttpPost]
  5. public ActionResult Create(Album album)
  6. {
  7. try
  8. {
  9. //Save Album
  10. storeDB.AddToAlbums(album);
  11. storeDB.SaveChanges();
  12.  
  13. return Redirect("/");
  14. }
  15. catch
  16. {
  17. //Invalid - redisplay with errors
  18.  
  19. var viewModel = new StoreManagerViewModel
  20. {
  21. Album = album,
  22. Genres = storeDB.Genres.ToList(),
  23. Artists = storeDB.Artists.ToList()
  24. };
  25.  
  26. return View(viewModel);
  27. }
  28. }
Offline Abbas - 04/09/2010 12:09
Avatar van Abbas Gouden medaille

Crew .NET
En wat werkt er dan niet?
Offline Martijn2008 - 04/09/2010 12:24
Avatar van Martijn2008 PHP beginner Het schrijven van die methode. In de tutorial worden bepaalde actions/methodes aangeroepen die ik niet heb.
Offline Abbas - 04/09/2010 12:26
Avatar van Abbas Gouden medaille

Crew .NET
Zoals welke!? 
Offline Martijn2008 - 04/09/2010 12:58 (laatste wijziging 04/09/2010 13:35)
Avatar van Martijn2008 PHP beginner Ik heb geen methode SaveChanges( ). Wat doet updatemodel eigenlijk precies en waarnaar refereert "Album"?

  1. //
  2. // POST: /StoreManager/Edit/5
  3.  
  4. [HttpPost]
  5. public ActionResult Edit(int id, FormCollection formValues)
  6. {
  7. var album = storeDB.Albums.Single(a => a.AlbumId == id);
  8.  
  9. try
  10. {
  11. //Save Album
  12.  
  13. UpdateModel(album, "Album");
  14. storeDB.SaveChanges();
  15.  
  16. return RedirectToAction("Index");
  17. }
  18. catch
  19. {
  20. var viewModel = new StoreManagerViewModel
  21. {
  22. Album = album,
  23. Genres = storeDB.Genres.ToList(),
  24. Artists = storeDB.Artists.ToList()
  25. };
  26.  
  27. return View(viewModel);
  28. }
  29. }

Offline Abbas - 04/09/2010 15:29
Avatar van Abbas Gouden medaille

Crew .NET
UpdateModel() is een methode die in je edmx-file zit om een object te wijzigen in de database. Als eerste parameter geef je je album-object mee en de tweede parameter is een prefix voor de valueprovider. Dan de SaveChanges(), deze voert de gewijzigde gegevens effectief door naar de database.
Offline Martijn2008 - 04/09/2010 16:56 (laatste wijziging 04/09/2010 17:16)
Avatar van Martijn2008 PHP beginner Ik krijg geen foutmeldingen op m'n code, maar de edit action doet het gewoon niet.

Het model:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace cms.Models
  7. {
  8. public class PageModel
  9. {
  10. public cms_LINQDataContext db = new cms_LINQDataContext();
  11.  
  12. public IQueryable<page> getAllPages()
  13. {
  14. return db.pages;
  15. }
  16.  
  17. public page getPage(int id)
  18. {
  19. return db.pages.SingleOrDefault(d => d.pid == id);
  20. }
  21.  
  22. public page editPage(int id)
  23. {
  24. return db.pages.Single(d => d.pid == id);
  25. }
  26.  
  27. internal void SaveChanges()
  28. {
  29. throw new NotImplementedException();
  30. }
  31. }
  32. }


Controller edit post-action:

  1. PageModel p = new PageModel();
  2. //
  3. // POST: /mypage/Edit/5
  4.  
  5. [HttpPost]
  6. public ActionResult Edit(int id, FormCollection collection)
  7. {
  8. var r = p.editPage(id);
  9.  
  10. try
  11. {
  12. //Save page
  13.  
  14. UpdateModel(r, "Page");
  15. p.SaveChanges();
  16.  
  17. return RedirectToAction("Index");
  18. }
  19. catch
  20. {
  21. return View("Error");
  22. }
  23. }
Offline Abbas - 04/09/2010 17:48
Avatar van Abbas Gouden medaille

Crew .NET
Jouw code ziet er niet hetzelfde uit als in die tutorial. Probeer eens te debuggen met breakpoints. Zo kan je zien wat er allemaal wel uitgevoerd wordt.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.224s