public ActionResult Detail(string eventSlug, string sessionSlug, SubmitOrEditSession input)
        {
            input.EventSlug = eventSlug;
            input.SessionSlug = sessionSlug;

            return Execute(input)
                .OnSuccess(x => RedirectToAction("Index", "Sessions"))
                .OnFailure(x => View("CreateOrUpdate", input));
        }
        public ActionResult Create(string userSlug)
        {
            if(State.NoEventScheduled()) {
                return View("NoEventScheduled");
            }

            if(!State.RegisteredForEvent()) {
                DisplayErrorMessage("Please register before submitting a session.");
                return RedirectToAction("Create", "Registration", new {eventSlug = State.CurrentEventSlug()});
            }

            var createUser = new SubmitOrEditSession();
            if (State.UserIsAdmin() && !userSlug.IsEmpty())
            {
                createUser.UserSlug = userSlug;
            }

            return View("CreateOrUpdate", createUser);
        }
        public ActionResult Index(string eventSlug, SubmitOrEditSession input)
        {
            if(State.NoEventScheduled()) {
                return View("NoEventScheduled");
            }

            if(!State.RegisteredForEvent()) {
                DisplayErrorMessage("Please register before submitting a session.");
                return RedirectToAction("Create", "Registration", new {eventSlug = State.CurrentEventSlug()});
            }

            return Execute(input)
                .OnSuccess(x => {
                    DocSession.SaveChanges();
                    var controllerName = State.UserIsAdmin() ? "Sessions" : "Account";
                    var routeValues = State.UserIsAdmin() ? new { Status = SessionStatus.PendingApproval } : null;
                    return RedirectToAction("Index", controllerName, routeValues);
                })
                .OnFailure(x => View("CreateOrUpdate", input));
        }