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:
- 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.
- 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.
- 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.
- Na stronie z listą producentów pobieram tekst komunikatu z Session i wyświetlam go użytkownikowi.
Usuwanie wygląda następująco:
- Na stronie z listą producentów klikam link kierujący do akcji Usun/{id producenta}
- 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.
- Strona ta wyciąga z Session nazwę producenta i pyta użytkownika, czy na pewno chce go usunąć.
- Użytkownik ma dwa przyciski do wyboru: Anuluj i Potwierdź.
- Gdy wybierze Anuluj, to obiekt producenta z Session jest usuwany, i następuje przekierowanie do strony z listą.
- Gdy wybierze Potwierdź, to następuje przekierowanie do odpowiedniej akcji kontrolera.
- 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?