public ActionResult EditMembershipUser(MembershipUserViewModel viewModel)
        {
            using (var unitOfWork = UnitOfWorkManager.NewUnitOfWork())
            {
                var             loggedOnUserId     = LoggedOnReadOnlyUser?.Id ?? Guid.Empty;            //Admin Id
                var             admin              = MembershipService.Get(loggedOnUserId);             //Admin doing update
                var             user               = MembershipService.Get(viewModel.MembershipUserId); //User to update
                var             membershipUserList = MembershipService.GetAll();                        //Dashboard #'s
                var             memberRole         = MembershipService.GetRolesForUser(user.Email);     //User's role
                StatesViewModel statesViewModel    = new StatesViewModel()                              //Load static State dropdown
                {
                    allStates = SettingsService.ListOfStates().ToList()
                };
                viewModel._statesViewModel = statesViewModel;
                var listViewModel = new MembershipUserListViewModel             //Dashboard #'s
                {
                    NonPagedMembershipUsers = membershipUserList.ToList()
                };
                viewModel._listViewModel = listViewModel;
                viewModel.Role           = memberRole[0];

                if (viewModel.EditDisplayName.Count() < 3)    //Display Name must have 3 Characters
                {
                    TempData[AppConstants.MessageViewBagName] = new AdminGenericMessageViewModel
                    {
                        Message     = "Username must have atleast 3 characters.",
                        MessageType = GenericMessages.danger
                    };
                    return(View(viewModel));
                }



                // Sort image out first
                if (viewModel.Files != null)
                {
                    // Before we save anything, check the user already has an upload folder and if not create one
                    var uploadFolderPath = HostingEnvironment.MapPath(string.Concat(SiteConstants.Instance.UploadFolderPath, user.Id));
                    if (!Directory.Exists(uploadFolderPath))
                    {
                        Directory.CreateDirectory(uploadFolderPath);
                    }

                    // Loop through each file and get the file info and save to the users folder and Db
                    var file = viewModel.Files[0];
                    if (file != null)
                    {
                        // If successful then upload the file
                        var uploadResult = AppHelpers.UploadFile(file, uploadFolderPath, true);

                        if (!uploadResult.UploadSuccessful)
                        {
                            TempData[AppConstants.MessageViewBagName] = new AdminGenericMessageViewModel
                            {
                                Message     = uploadResult.ErrorMessage,
                                MessageType = GenericMessages.danger
                            };
                            return(View(viewModel));
                        }
                        // Save avatar to user
                        user.Avatar = uploadResult.UploadedFileName;
                    }
                }

                // Set the users Avatar for the confirmation page
                viewModel.Avatar = user.Avatar;

                user.FirstName = viewModel.EditFirstName;
                user.LastName  = viewModel.EditLastName;
                user.City      = viewModel.EditCity;
                user.State     = viewModel.EditState;

                if (viewModel.EditDisplayName != user.DisplayName)
                {
                    if (MembershipService.GetUserByDisplayName(viewModel.EditDisplayName) != null)
                    {
                        unitOfWork.Rollback();
                        TempData[AppConstants.MessageViewBagName] = new AdminGenericMessageViewModel
                        {
                            Message     = "This display name is already taken. Please choose another display name.",
                            MessageType = GenericMessages.danger
                        };
                        return(View(viewModel));
                    }
                    user.DisplayName = viewModel.EditDisplayName;
                }

                if (viewModel.EditEmail != user.Email)
                {
                    if (MembershipService.GetUserByEmail(viewModel.EditEmail) != null)
                    {
                        unitOfWork.Rollback();
                        TempData[AppConstants.MessageViewBagName] = new AdminGenericMessageViewModel
                        {
                            Message     = "This email is already taken. Please choose another email.",
                            MessageType = GenericMessages.danger
                        };
                        return(View(viewModel));
                    }
                    user.Email = viewModel.EditEmail;
                }

                try
                {
                    MembershipService.AdminProfileUpdated(user, admin);
                    unitOfWork.Commit();
                    TempData[AppConstants.MessageViewBagName] = new AdminGenericMessageViewModel
                    {
                        Message     = "Profile updated",
                        MessageType = GenericMessages.success
                    };
                }
                catch (Exception ex)
                {
                    unitOfWork.Rollback();
                    //LoggingService.Error(ex);
                    TempData[AppConstants.MessageViewBagName] = new AdminGenericMessageViewModel
                    {
                        Message     = ex.ToString(),
                        MessageType = GenericMessages.danger
                    };
                }
                return(View(viewModel));
            }
        }