public ActionResult AjaxAddOrder(int customerId)
        {
            if (ModelState.IsValid)
            {
                var context = new SampleEntities();
                var customer = context.Customers.Single(c => c.ID == customerId);
                var order = new Order();

                try
                {
                    UpdateModel(order);
                    customer.Orders.Add(order);
                    context.SaveChanges();
                }
                catch (Exception e)
                {
                    Response.StatusCode = 500;
                    Response.AppendHeader("message",
                                          "There was an issue adding order to customer \"" + customer.FirstName + " " + customer.LastName +
                                          "\". Please contact tech support with this message: " + Utility.GetInnermostException(e).Message);
                }
            }

            return View(new GridModel(GetOrders(customerId)));
        }
        public ActionResult AjaxAddCustomer(string lastName, string firstName)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var context = new SampleEntities();
                    var customer = new Customer();
                    UpdateModel(customer);
                    context.Customers.AddObject(customer);
                    context.SaveChanges();
                }
                catch (Exception e)
                {
                    Response.StatusCode = 500;
                    Response.AppendHeader("message",
                                          "There was an issue adding customer \"" + firstName + " " + lastName +
                                          "\". Please contact tech support with this message: " + Utility.GetInnermostException(e).Message);
                }
            }

            return View(new GridModel(GetCustomers()));
        }
        public ActionResult AjaxDeleteCustomer(int customerId)
        {
            try
            {
                var context = new SampleEntities();
                var customer = context.Customers.Single(c => c.ID == customerId);
                bool orders = customer.Orders.Any();

                if (orders)
                {
                    Response.StatusCode = 500;
                    Response.AppendHeader("message", "This customer has order history, and cannot be deleted until all orders are deleted.");
                }
                else
                {
                    context.Customers.DeleteObject(customer);
                    context.SaveChanges();
                }
            }
            catch (System.Exception e)
            {
                Response.StatusCode = 500;
                Response.AppendHeader("message", "There was an issue deleting this customer. Please contact tech support with this message: " + Utility.GetInnermostException(e).Message);
            }

            return View(new GridModel(GetCustomers()));
        }
        public ActionResult AjaxSaveOrder(int customerId, int orderId)
        {
            if (ModelState.IsValid)
            {
                var context = new SampleEntities();
                var order = context.Customers.Single(c => c.ID == customerId).Orders.Single(o => o.ID == orderId);

                try
                {
                    UpdateModel(order);
                    context.SaveChanges();
                }
                catch (Exception e)
                {
                    Response.StatusCode = 500;
                    Response.AppendHeader("message",
                                          "There was an issue editing data for this order. Please contact tech support with this message: " + e.Message);
                }
            }

            return View(new GridModel(GetOrders(customerId)));
        }
        public ActionResult AjaxSaveCustomer(int customerId, string lastName, string firstName)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var context = new SampleEntities();
                    var customer = context.Customers.Single(c => c.ID == customerId);
                    UpdateModel(customer);
                    context.SaveChanges();
                }
                catch (Exception e)
                {
                    Response.StatusCode = 500;
                    Response.AppendHeader("message",
                                          "There was an issue editing data for customer \"" + firstName + " " + lastName +
                                          "\". Please contact tech support with this message: " + e.Message);
                }
            }

            return View(new GridModel(GetCustomers()));
        }
        public ActionResult AjaxDeleteOrder(int customerId, int orderId)
        {
            try
            {
                var context = new SampleEntities();
                var customer = context.Customers.Single(c => c.ID == customerId);
                var order = customer.Orders.Single(o => o.ID == orderId);
                context.DeleteObject(order);
                context.SaveChanges();
            }
            catch (System.Exception e)
            {
                Response.StatusCode = 500;
                Response.AppendHeader("message", "There was an issue deleting order " + orderId + ". Please contact tech support with this message: " + Utility.GetInnermostException(e).Message);
            }

            return View(new GridModel(GetOrders(customerId)));
        }