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)
{