I have a 3 page form and I'm trying to store the data of each page in a session object, but I can't figure out what's missing from my implementation
If I put a break point on NewUser newUser = GetNewUser();
the data for the object is always null on each page of the form.
For creating the session object, I'm using a helper to create a complex type.
Controller's Actions
private NewUser GetNewUser()
{
if (HttpContext.Session.GetObjectFromJson<NewUser>("newUser") == null)
{
var obj = new NewUser();
HttpContext.Session.SetObjectAsJson("newUser", obj);
}
return (NewUser)HttpContext.Session.GetObjectFromJson<NewUser>("newUser");
}
[HttpGet("BasicDetails")]
[HttpPost("BasicDetails")]
public IActionResult BasicDetails(BasicDetails basicDetailsModel, string prevBtn, string nextBtn)
{
if (nextBtn != null)
{
if (ModelState.IsValid)
{
NewUser newUser = GetNewUser();
newUser.FirstName = basicDetailsModel.FirstName;
newUser.LastName = basicDetailsModel.LastName;
newUser.Email = basicDetailsModel.Email;
newUser.Password = basicDetailsModel.Password;
newUser.Phone = basicDetailsModel.Phone;
newUser.Country = basicDetailsModel.Country;
newUser.City = basicDetailsModel.City;
newUser.RecieveCommunication = basicDetailsModel.RecieveCommunication;
return View("Views/CreateAccount/FerretDetails.cshtml");
}
}
return View("Views/CreateAccount/BasicDetails.cshtml");
}
[HttpGet("FerretDetails")]
[HttpPost("FerretDetails")]
public IActionResult FerretDetails(FerretDetails ferretDetailsModel, string prevBtn, string nextBtn)
{
NewUser newUser = GetNewUser();
if (prevBtn != null)
{
BasicDetails basicDetails = new BasicDetails();
basicDetails.FirstName = newUser.FirstName;
basicDetails.LastName = newUser.LastName;
basicDetails.Email = newUser.Email;
basicDetails.Password = newUser.Password;
basicDetails.Phone = newUser.Phone;
basicDetails.Country = newUser.Country;
basicDetails.City = newUser.City;
basicDetails.RecieveCommunication = newUser.RecieveCommunication;
return View("Views/CreateAccount/BasicDetails.cshtml", basicDetails);
}
if (nextBtn != null)
{
if (ModelState.IsValid)
{
newUser.FerretModel = ferretDetailsModel.FerretModel;
newUser.FerretSerialNumber = ferretDetailsModel.FerretSerialNumber;
newUser.PurchasedDate = ferretDetailsModel.PurchasedDate;
newUser.PurchasedFrom = ferretDetailsModel.PurchasedFrom;
return View("Views/CreateAccount/AccountType.cshtml");
}
}
return View();
}
[HttpPost("/AccountType")]
public IActionResult AccountType(AccountType accountTypeModel, string prevBtn, int accountTypeCheck, string createBtn)
{
NewUser newUser = GetNewUser();
if (prevBtn != null)
{
FerretDetails ferretDetails = new FerretDetails();
ferretDetails.FerretModel = newUser.FerretModel;
ferretDetails.FerretSerialNumber = newUser.FerretSerialNumber;
ferretDetails.PurchasedDate = newUser.PurchasedDate;
ferretDetails.PurchasedFrom = newUser.PurchasedFrom;
return View("Views/CreateAccount/FerretDetails.cshtml", ferretDetails);
}
if (createBtn != null)
{
if (ModelState.IsValid)
{
}
}
return View();
}
Helper class
public static class SessionExtensions
{
public static void SetObjectAsJson(this ISession session, string key, object value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T GetObjectFromJson<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
}
}