"My thoughts are we don't want any kung-fu ViewState or other mechanisms, this framework is about going back to a stateless web."
The example you provided is pretty easy to do without any sort of "view state kung fu" using capabilities that are already in MVC. "User adds a person and sees that on the next screen." Let me code up a simple PersonController that does exactly what you want:
public ActionResult Add()
{
return View(new Person());
}
[HttpPost]
public ActionResult Add(PeronViewModel myNewPersonViewModel )
{
//validate, user entered everything correctly
if( !ModelState.IsValid ) x
return View();
//map model to my database/entity/domain object
var myNewPerson = new Person()
{
FirstName = myNewPersonViewModel.FirstName,
LastName = myNewPersonViewModel.LastName
}
//1. maintains person state, sends the user to the next view in the chain
//using same action
if( MyDataLayer.Save( myNewPerson ) )
{
var persons = MyDataLayer.GetPersons();
persons.Add(myNewPersion);
return View("PersonGrid",persons);
}
//2. pass along the unique id of person to a different action or controller
//yes, another database call, but probably not a big deal
if( MyDataLayer.Save( myNewPerson ) )
return RedirecToAction("PersonGrid", ...etc pass the int as route value);
return View("PersonSaveError", myNewPersonViewModel);
}
Now what I'm sensing is that you want person on yet another page after PersonSaveSuccess or something else. In that case you probably want to use TempData[""] which is a single serving session and only saves "state" from one request to another or manage the traditional Session[""] yourself somehow.
What is confusing to me is your probably going to the db to get all your persons anyway. If you save a person it should be in your persons collection in the next call to your GetPersons(). If your not using Ajax, than what state are you trying to persist?