private static AccountListRow GetAccountView(MembershipUser account)
        {
            KcsarUserProfile profile = ProfileBase.Create(account.UserName) as KcsarUserProfile;

            AccountListRow row = new AccountListRow
            {
                Username        = account.UserName,
                LastActive      = account.LastLoginDate,
                FirstName       = profile.FirstName,
                LastName        = profile.LastName,
                LinkKey         = profile.LinkKey,
                Email           = account.Email,
                ExternalSources = profile.ExternalSource,
                IsLocked        = account.IsLockedOut,
            };

            return(row);
        }
        public ActionResult EditUser(string id, FormCollection fields)
        {
            AccountListRow row = GetAccountView(id);

            TryUpdateModel(row, new[] { "Email", "LinkKey", "ExternalSources" });

            if (string.IsNullOrWhiteSpace(row.LinkKey))
            {
                TryUpdateModel(row, new[] { "LastName", "FirstName" });
            }

            if (row.LastName != fields["LastName"])
            {
                ModelState.SetModelValue("LastName", new ValueProviderResult(fields["LastName"], fields["LastName"], CultureInfo.CurrentUICulture));
                ModelState.AddModelError("LastName", "Can't be changed while Link is set");
            }

            if (row.FirstName != fields["FirstName"])
            {
                ModelState.SetModelValue("FirstName", new ValueProviderResult(fields["FirstName"], fields["FirstName"], CultureInfo.CurrentUICulture));
                ModelState.AddModelError("FirstName", "Can't be changed while Link is set");
            }

            if (ModelState.IsValid)
            {
                MembershipUser   user    = Membership.GetUser(id);
                KcsarUserProfile profile = ProfileBase.Create(user.UserName) as KcsarUserProfile;

                if (user.Email != row.Email)
                {
                    user.Email = row.Email;
                }

                if (profile.LastName != row.LastName)
                {
                    profile.LastName = row.LastName;
                }
                if (profile.FirstName != row.FirstName)
                {
                    profile.FirstName = row.FirstName;
                }
                if (profile.LinkKey != row.LinkKey)
                {
                    profile.LinkKey = row.LinkKey;
                }
                if (profile.ExternalSource != row.ExternalSources)
                {
                    profile.ExternalSource = row.ExternalSources;
                }

                try
                {
                    Membership.UpdateUser(user);
                    profile.Save();
                    ViewData["success"] = "Saved OK";
                }
                catch (Exception e)
                {
                    ViewData["error"] = e.ToString();
                }
            }

            return(View(row));
            //TryUpdateModel(user, new[] { "Email" });



            //ModelState.SetModelValue("Owners", fields["Owners"]);
            //role.Owners.Clear();
            //role.Owners.AddRange((fields["Owners"] ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(f => new Guid(f.Trim())));

            //ModelState.SetModelValue("Destinations", fields["Destinations"]);
            //role.Destinations.Clear();
            //role.Destinations.AddRange((fields["Destinations"] ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()));

            //try
            //{
            //    nested.UpdateRole(role);
            //    ViewData["success"] = "Saved OK";
            //}
            //catch (Exception e)
            //{
            //    ViewData["error"] = e.ToString();
            //}

            //return View(role);
        }