diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml index 9d717f7d42..d1e8f2bf48 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml @@ -14,24 +14,16 @@ Html.RequiresJs("/umbraco_client/ui/jquery.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js"); + + var success = TempData["ProfileUpdateSuccess"] != null; + } @*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@ @Html.RenderJsHere() @if (Members.IsLoggedIn()) -{ - Html.EnableClientValidation(); - Html.EnableUnobtrusiveJavaScript(); - Html.RequiresJs("/umbraco_client/ui/jquery.js"); - Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js"); - Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js"); - - var success = TempData["ProfileUpdateSuccess"] != null; - - @*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@ - @Html.RenderJsHere() - +{ if (success) { // This message will show if RedirectOnSucces is set to false (default) @@ -43,7 +35,7 @@
Edit profile - @Html.ValidationSummary(true) + @Html.ValidationSummary("profileModel", true) @Html.LabelFor(m => profileModel.Name) @Html.TextBoxFor(m => profileModel.Name) diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Login.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Login.cshtml index 52184e8c73..d37833bc2f 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Login.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Login.cshtml @@ -24,7 +24,7 @@
Login - @Html.ValidationSummary(true) + @Html.ValidationSummary("loginModel", true) @Html.LabelFor(m => loginModel.Username) @Html.TextBoxFor(m => loginModel.Username) diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml index ed1e0915d4..5e99b7b6a2 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml @@ -58,8 +58,8 @@ else {
Register Member - - @Html.ValidationSummary(true) + + @Html.ValidationSummary("registerModel", true) @Html.LabelFor(m => registerModel.Name) @Html.TextBoxFor(m => registerModel.Name) diff --git a/src/Umbraco.Web/Controllers/UmbLoginController.cs b/src/Umbraco.Web/Controllers/UmbLoginController.cs index c1b8c3d14e..3ae41835bc 100644 --- a/src/Umbraco.Web/Controllers/UmbLoginController.cs +++ b/src/Umbraco.Web/Controllers/UmbLoginController.cs @@ -19,7 +19,8 @@ namespace Umbraco.Web.Controllers if (Members.Login(model.Username, model.Password) == false) { - ModelState.AddModelError("loginModel.Username", "Invalid username or password"); + //don't add a field level error, just model level + ModelState.AddModelError("loginModel", "Invalid username or password"); return CurrentUmbracoPage(); } diff --git a/src/Umbraco.Web/Controllers/UmbProfileController.cs b/src/Umbraco.Web/Controllers/UmbProfileController.cs index af647215ac..03c5ee91ff 100644 --- a/src/Umbraco.Web/Controllers/UmbProfileController.cs +++ b/src/Umbraco.Web/Controllers/UmbProfileController.cs @@ -29,7 +29,8 @@ namespace Umbraco.Web.Controllers var updateAttempt = Members.UpdateMemberProfile(model); if (updateAttempt.Success == false) { - ModelState.AddModelError("profileModel.Email", updateAttempt.Exception); + //don't add a field level error, just model level + ModelState.AddModelError("profileModel", updateAttempt.Exception.Message); return CurrentUmbracoPage(); } diff --git a/src/Umbraco.Web/Controllers/UmbRegisterController.cs b/src/Umbraco.Web/Controllers/UmbRegisterController.cs index 3dad27a13d..c661c24f69 100644 --- a/src/Umbraco.Web/Controllers/UmbRegisterController.cs +++ b/src/Umbraco.Web/Controllers/UmbRegisterController.cs @@ -64,10 +64,8 @@ namespace Umbraco.Web.Controllers case MembershipCreateStatus.InvalidProviderUserKey: case MembershipCreateStatus.DuplicateProviderUserKey: case MembershipCreateStatus.ProviderError: - ModelState.AddModelError((model.UsernameIsEmail || model.Username == null) - ? "registerModel.Email" - : "registerModel.Username", - "An error occurred creating the member: " + status); + //don't add a field level error, just model level + ModelState.AddModelError("registerModel", "An error occurred creating the member: " + status); break; default: throw new ArgumentOutOfRangeException(); diff --git a/src/Umbraco.Web/ModelStateExtensions.cs b/src/Umbraco.Web/ModelStateExtensions.cs index d2980c5aab..56fa2cf1af 100644 --- a/src/Umbraco.Web/ModelStateExtensions.cs +++ b/src/Umbraco.Web/ModelStateExtensions.cs @@ -16,7 +16,9 @@ namespace Umbraco.Web { if (dictionary == null) return; - foreach (var keyValuePair in dictionary.Where(keyValuePair => keyValuePair.Key.StartsWith(prefix + "."))) + foreach (var keyValuePair in dictionary + //It can either equal the prefix exactly (model level errors) or start with the prefix. (property level errors) + .Where(keyValuePair => keyValuePair.Key == prefix || keyValuePair.Key.StartsWith(prefix + "."))) { state[keyValuePair.Key] = keyValuePair.Value; } diff --git a/src/Umbraco.Web/Mvc/ViewDataContainerExtensions.cs b/src/Umbraco.Web/Mvc/ViewDataContainerExtensions.cs index ef611e96c4..f8f627d39a 100644 --- a/src/Umbraco.Web/Mvc/ViewDataContainerExtensions.cs +++ b/src/Umbraco.Web/Mvc/ViewDataContainerExtensions.cs @@ -23,6 +23,8 @@ namespace Umbraco.Web.Mvc { var newContainer = new ViewDataContainer(); newContainer.ViewData.ModelState.Merge(container.ViewData.ModelState, prefix); + //change the html field name too + newContainer.ViewData.TemplateInfo.HtmlFieldPrefix = prefix; return newContainer; } diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs index 107f1fd563..11523cf561 100644 --- a/src/Umbraco.Web/Security/MembershipHelper.cs +++ b/src/Umbraco.Web/Security/MembershipHelper.cs @@ -69,8 +69,12 @@ namespace Umbraco.Web.Security try { - //Use the membership provider to change the email since that is configured to do the checks to check for unique emails if that is configured. - membershipUser = UpdateMember(membershipUser, Membership.Provider, model.Email); + //check if the email needs to change + if (model.Email.InvariantEquals(membershipUser.Email) == false) + { + //Use the membership provider to change the email since that is configured to do the checks to check for unique emails if that is configured. + membershipUser = UpdateMember(membershipUser, Membership.Provider, model.Email); + } } catch (Exception ex) { @@ -82,11 +86,10 @@ namespace Umbraco.Web.Security //NOTE: If changing the username is a requirement, than that needs to be done via the IMember directly since MembershipProvider's natively do // not support changing a username! - if (model.Name != null) + if (model.Name != null && member.Name != model.Name) { member.Name = model.Name; } - member.Email = model.Email; if (model.MemberProperties != null) {