Browse Source

Automatically localize data annotation validation errors.

pull/179/head
Halil İbrahim Kalkan 9 years ago
parent
commit
5c693cf332
  1. 63
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/Metadata/AbpModelMetadataProvider.cs
  2. 4
      src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs

63
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/Metadata/AbpModelMetadataProvider.cs

@ -0,0 +1,63 @@
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.ModelBinding.Metadata
{
[Dependency(ServiceLifetime.Singleton, ReplaceServices = true)]
[ExposeServices(typeof(IModelMetadataProvider))]
public class AbpModelMetadataProvider : DefaultModelMetadataProvider
{
private static readonly PropertyInfo ValidationAttributeErrorMessageStringProperty;
static AbpModelMetadataProvider()
{
ValidationAttributeErrorMessageStringProperty = typeof(ValidationAttribute)
.GetProperty("ErrorMessageString", BindingFlags.Instance | BindingFlags.NonPublic);
}
public AbpModelMetadataProvider(ICompositeMetadataDetailsProvider detailsProvider)
: base(detailsProvider)
{
}
public AbpModelMetadataProvider(ICompositeMetadataDetailsProvider detailsProvider, IOptions<MvcOptions> optionsAccessor)
: base(detailsProvider, optionsAccessor)
{
}
protected override DefaultMetadataDetails[] CreatePropertyDetails(ModelMetadataIdentity key)
{
var details = base.CreatePropertyDetails(key);
foreach (var detail in details)
{
NormalizeMetadataDetail(detail);
}
return details;
}
private void NormalizeMetadataDetail(DefaultMetadataDetails detail)
{
foreach (var validationAttribute in detail.ModelAttributes.Attributes.OfType<ValidationAttribute>())
{
NormalizeValidationAttrbute(validationAttribute);
}
}
protected virtual void NormalizeValidationAttrbute(ValidationAttribute validationAttribute)
{
if (validationAttribute.ErrorMessage == null)
{
validationAttribute.ErrorMessage = ValidationAttributeErrorMessageStringProperty.GetValue(validationAttribute) as string;
}
}
}
}

4
src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs

@ -47,13 +47,13 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
public class UserInfoViewModel public class UserInfoViewModel
{ {
[Required(ErrorMessage = "The {0} field is required.")] [Required]
[MaxLength(IdentityUserConsts.MaxUserNameLength)] [MaxLength(IdentityUserConsts.MaxUserNameLength)]
[Display(Name = "UserName")] [Display(Name = "UserName")]
public string UserName { get; set; } public string UserName { get; set; }
[Required] [Required]
[MaxLength(IdentityUserConsts.MaxPasswordLength, ErrorMessage = "The field {0} must be a string or array type with a maximum length of '{1}'.")] [MaxLength(IdentityUserConsts.MaxPasswordLength)]
[DataType(DataType.Password)] [DataType(DataType.Password)]
[Display(Name = "Password")] [Display(Name = "Password")]
public string Password { get; set; } public string Password { get; set; }

Loading…
Cancel
Save