/// <summary>
        /// Edit the entity by passing in the form collection so it maps the
        /// html fields to the entity properites.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="id"></param>
        /// <param name="collection"></param>
        /// <param name="fetcher"></param>
        /// <returns></returns>
        public override ActionResult Edit(Profile updated)
        {
            DashboardLayout(true);
            EntityActionResult result = null;

            try
            {
                result = _helper.Edit(updated, (original) =>
                {
                    // Copy back the original values.
                    updated.UserId   = original.UserId;
                    updated.UserName = original.UserName;
                    ProfileHelper.ChangeEmail(updated, original);

                    if (!updated.Errors.HasAny)
                    {
                        ProfileHelper.ApplyProfileImage(updated);
                    }
                });
            }
            catch
            {
                result = new EntityActionResult(false, "Error while updating profile", item: updated, isAuthorized: true, isAvailable: true);
            }

            return(BuildRedirectResult(result, successAction: _viewSettings.ActionForCreationSuccess, routeValues: new { id = updated.Id },
                                       viewLocationForErrors: _viewSettings.PageLocationForEdit, viewActionForErrors: "Edit"));
        }
        /// <summary>
        /// Gets the photo thumbnail as a json response, result object contains "Success:bool, Message:string, Item:string" fields.
        /// </summary>
        /// <param name="id">The id of the profile.</param>
        /// <returns></returns>
        public ActionResult ApplyProfilePhoto(int id)
        {
            var result = _helper.Edit(id);

            if (!result.Success)
            {
                return(Json(new { Success = false, Message = result.Message }, JsonRequestBehavior.AllowGet));
            }

            var profile = result.ItemAs <Profile>();

            ProfileHelper.ApplyProfileImage(profile);
            profile.Save();
            var success = !profile.Errors.HasAny;
            var message = success ? string.Empty : profile.Errors.Message("<br/>");

            return(Json(new { Success = success, Message = message }, JsonRequestBehavior.AllowGet));
        }