W jaki spsób przechowywać dane o wybranej usłudze przez użytkownika?

0

Nie wiem, jaki jest najlepszy sposób aby przechowywać dane o wybranej usłudze - jej ID. Użytkownik będzie mógł wybrać tylko jedną usługę jednorazowo, następnie będzie mógł się na nią zarejestrować a dane zostaną wysłane do bazy danych.

Przechowywanie tego w jakiejś właściwości, czy liście a w momencie kiedy użytkownik się na nią zarejestruje - usuwanie jej, chyba nie jest najlepszym rozwiązaniem.
To co mi przychodzi jeszcze do głowy to mechanizm stanu sesji, albo TempData.

1
  1. Wymiana danych pomiędzy requestami
  2. Sesja
  3. Ciacho
  4. Local Storage

W dokładnie takiej kolejności :)

0

postarałem się żeby udało mi się przesyłać dane przez ukryte pola(tak mi się wydaje) - ale pojawił się kolejny "problem" Chodzi o to, że tworzę formularz do kontrolera BookVisitController opatrzonego atrybutem [Authorize] w tym momencie rejestruje/loguje się użytkownik:

 
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("AddVisit", "BookVisit");

Po przekierowaniu do poniższej metody akcji traci ona parametr ( w którym przechowuje ServiceID), który przekazałem w ten sposób:

@using (Html.BeginForm("AddVisit", "BookVisit"))
{
    @Html.HiddenFor(s => s.ServiceID)

    <input type="submit" value="Zarejestruj się" />
    
} 
[Authorize]
    public class BookVisitController : Controller
    {
       ...

        [HttpGet]
        public ActionResult AddVisit(int serviceID)
        {
            //wygenerowanie widoku, gdzie użytkownik wybiera sobie termin

            return View();
        }

    } 

Do głowy chyba tylko przychodzą mi metody pomocnicze Ajax, przez które będę logował użytkownika. Nigdy tego nie używałem tylko czytałem na ten temat ale znając życie da się to zrobić inny sposób, a mój pomysł jest niewykonalny...

0

Wpadłem wydaje mi się na fajny pomysł żeby to zrobić tylko jest jedna rzecz, nie wiem czemu właściwość

 public Service selectedServiceID { get; set; }

po przekierowaniu do metody akcji Index w kontrolerze BookVisitController (po tym jak użytkownik się zarejestruje/zaloguje) przyjmuje wartość null..

public class BookVisitController : Controller
    {
        private IServiceRepository repository;
        private Service selectedServiceID { get; set; }

        public BookVisitController(IServiceRepository serviceRepository)
        {
            repository = serviceRepository;
        }

        public RedirectToRouteResult AddVisit(int serviceID)
        {
            selectedServiceID = repository.Services.FirstOrDefault(s => s.ServiceID == serviceID);
            
            return RedirectToAction("Index");
        }


        [Authorize]
        [HttpGet]
        public ActionResult Index()
        {
            return View(selectedServiceID);
        } 

Czyli działa to w ten sposób: Po naciśnięciu przycisku Zarejestruj, wysyła się formularz z polem ukrytym dla ServiceID i trafia do metody akcji AddVisit, w której jest zapisywany do właściwości selectedServiceID, następnie mamy przekierowanie do Index-> użytkownik się rejestruje i po tym zostaje z powrotem przekierowany do Index jednakże w tym momecie właściwość selectedServiceID wynosi null. Ma ktoś jakiś pomysł ?

EDIT:

Znalazłem rozwiązanie -> TempData

public RedirectToRouteResult AddVisit(int serviceID)
        {
            Service selectedServiceID = repository.Services.FirstOrDefault(s => s.ServiceID == serviceID);

            TempData["selectedServiceID"] = selectedServiceID;

            return RedirectToAction("Index");
        }


        [Authorize]
        public ActionResult Index()
        {
            Service selectedServiceID = TempData["selectedServiceID"] as Service;

            return View(selectedServiceID);
        } 

Czy tak powinienem to zrobić ? Czy jest jakiś inny sposób ?

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