Q:

Storing model is session. Is there any better way for it?

I have a model class like following
public class ProductModel
{
    string ProductName { get; set; }
    int Quantity { get; set; }
}

In Controller I have an Action item
public ActionResult ShowProduct()
{
      return View();
}

In my view user has two text boxes; where they enter product name and quantity.  The first time they come in on this page these fields are empty. Once they enter values in these text boxes they hit a Next button which take them to a next page where they have to enter additional information about order.
On that page I have a back button and they can come back to this first page. Problem is I need to display the information that they entered in first page but on the second page I don’t have that ProductModel  anymore. I can store that model in session but not sure if there is any better pattern of doing it in MVC

A:

I would steer clear of Session and TempData. If you're using MVC, and your views are separated by full postbacks, (not Ajax) maybe you could use a view model pattern across different controller actions.
public class OrderController : Controller
{
    public ActionResult ShowProduct()
    {
        return View(new ProductViewModel());
    }

    [HttpPost]
    public ActionResult DoOrderStuff(ProductViewModel vm)
    {
        if (ModelState.IsValid)
        {
            // OrderViewModel would contain some product data 
            // to be used in the DoOrderStuff view
            return View(new OrderViewModel(vm));
        }

        // error, go back to Page 1
        return View("ShowProduct", vm);
    }
}

This gives you room for validation while still following the wizard style views you described.
Caveat I just realized with this:
If you have a bunch of successive views, your user experience would probably suffer without a lot of hacking together of different view models. E.g. customer is on page 5 of the wizard, and wants to go back to page 2--my answer in its simplest form wouldn't accommodate that. However, with a good abstraction of the values in all your screens, it could be done.

