[ASP.NET] MVC - przekazywanie danych - Session

0

Moje doświadczenie z MVC, a i w ogóle z ASP.NET jest raczej niewielkie, więc pytanie pewno jest banalne.
Jak się nie trudno domyślić tworzę pewien system zarządzający danymi w bazie. Mam w nim różne formularze do dodawania danych.

Scenariusz działań dla dodawania danych jest taki:

  1. Przykładowy formularz (np. dodawania producenta) posiada kilka pól, validatorów, itp. Po wciśnięciu znajdującego się na nim przycisku, o ile validatory stwierdzą, że dane im pasują, to w code-behind zapisuję dane z pól do Session i przekierowuję do kontolera.
  2. W kodzie kontrolera pobieram dane z Session i wykonuję operację - konkretnie przy użyciu LINQ, który stanowi u mnie model, wywołuję procedurę składowaną z bazy.
  3. Procedura zwraca mi jakiś tekstowy komunikat - zarówno o błędzie, jak i powodzeniu akcji, który to znowu wsadzam do Session. Wówczas następuje przekierowanie do strony z listą np. producentów.
  4. Na stronie z listą producentów pobieram tekst komunikatu z Session i wyświetlam go użytkownikowi.

Usuwanie wygląda następująco:

  1. Na stronie z listą producentów klikam link kierujący do akcji Usun/{id producenta}
  2. Kontroler najpierw (ponownie odpowiednią procedurą) wyciąga dane o producencie z bazy, wrzuca je do Session (cały obiekt producenta klasy, którą automatycznie stworzył LINQ) i wyświetla stronę potwierdzania usuwania.
  3. Strona ta wyciąga z Session nazwę producenta i pyta użytkownika, czy na pewno chce go usunąć.
  4. Użytkownik ma dwa przyciski do wyboru: Anuluj i Potwierdź.
  5. Gdy wybierze Anuluj, to obiekt producenta z Session jest usuwany, i następuje przekierowanie do strony z listą.
  6. Gdy wybierze Potwierdź, to następuje przekierowanie do odpowiedniej akcji kontrolera.
  7. Kontroler na podstawie danych z Session uruchamia odpowiednią procedurę i go usuwa z bazy, następnie z sesji a na końcu przekierowuje na stronę z listą.

Działa to wszystko cudownie, ale mam wątpliwości... Wydaje mi się, że nie zaburzam w ten sposób samej idei MVC. Ale nie wiem, czy używanie Session ma w ogóle sens? Czy powinienem to inaczej zrealizować? A jeśli tak, to jak?

0

No powiem Ci, ze trochę namieszałeś :) Session <ort>w ogóle </ort>nie jest potrzebne w takim przypadku, jak również używanie code-behind( nie jest zgodne z założeniami MVC).

Żeby zapisać dane ze strony najlepiej na stronie zrobić formularz, przyciskiem submit mógłbyś wtedy wywoływać Twoja akcje w której zapisujesz dane do bazy. A wszystkie dane z formularza masz w tej akcji w zmiennej Request.Form. Możesz popatrzyć jak robi to Scott Gu (on przekazuje dane z formularza jako argumenty akcji )
http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

A co do usuwania to chyba lepiej javascript'owy confirm w celu potwierdzenia usunięcia.

0

Nie masz racji, nie namieszałem trochę, tylko bardzo ;P Chciałem zrobić jakiegoś miksa MVC i WebForms, zupełnie niepotrzebnie.

Poprawiłem zgodnie z Twoimi uwagami + jeszcze doczytałem w necie i teraz jest dużo lepiej pod każdym względem, dzięki [browar]

A co do usuwania, to też masz rację, taki confirm jest lepszy, do przypadkiem wyszło tak, że puszczam go AJAXem i lista się przeładowuje bez odświeżania, znacznie lepiej to teraz wygląda :)

0

Witam,

również jestem początkujący w temacie ASP.NET MVC i w związku z tym mam pytanie: na jednej tabelce potrafie odczytywać/modyfikować/usuwać dane z bazy(za utworzonego przez siebie HomeController'a), jednak nie wiem jak to ma wyglądać gdy mam do dyspozycji więcej tabel..

Do każdej tabeli w bazie mam utworzyć osobny Controller?

Mam dajmy na to kontroler pt. PracaController wpisuję do niego różne akcje na tabeli praca a dane z tej tabeli nie są w ogole wyświetlane/modyfikowane/usuwane...

Jak się sprawy mają gdy mamy do dyspozycji więcej kontrolerów?

Dziękuje z góry za pomoc,

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1