加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何使用Autotyper和Betty方法将DataAnnotation

发布时间:2020-12-16 03:16:10 所属栏目:asp.Net 来源:网络整理
导读:我需要澄清如何实现Betty的代码解决方案,以便使用AutoMapper将数据注释元数据传输到ViewModel(参见 here).或者,如果你有更好的方法,请分享.也许对于熟悉AutoMapper的人来说,实现贝蒂的答案是显而易见的,但我是新手. 这是一个简单的例子,我将如何添加到此代码
我需要澄清如何实现Betty的代码解决方案,以便使用AutoMapper将数据注释元数据传输到ViewModel(参见 here).或者,如果你有更好的方法,请分享.也许对于熟悉AutoMapper的人来说,实现贝蒂的答案是显而易见的,但我是新手.

这是一个简单的例子,我将如何添加到此代码中以使Betty的解决方案工作:

// Data model Entity
public class User1
{

    [Required]
    public int Id { get; set; }

    [Required]
    [StringLength(60)]
    public string FirstName { get; set; }

    [Required]
    [StringLength(60)]
    public string LastName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [StringLength(40)]
    public string Password { get; set; }

}

// ViewModel
public class UserViewModel
{

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Password { get; set; }

}

当前的AutoMapper实现:

// Called once somewhere
Mapper.CreateMap<User1,UserViewModel>(MemberList.Destination);

// Called in controller method,or wherever
User user = new User() { FirstName = "Tony",LastName = "Baloney",Password = "secret",Id = 10 };

UserViewModel userVM = Mapper.Map<User,UserViewModel>(user);

// NOW WHAT???

我在Application_Start中的global.asax中尝试过这个:

var configProvider = Mapper.Configuration as IConfigurationProvider;
ModelMetadataProviders.Current = new MetadataProvider(configProvider);
ModelValidatorProviders.Providers.Clear(); // everything's broke when this is not done
ModelValidatorProviders.Providers.Add(new ValidatorProvider(configProvider));

另外,我不得不修改Betty的GetMappedAttributes:

propertyMap.DestinationProperty.GetCustomAttributes:
propertyMap.DestinationProperty.MemberInfo.GetCustomAttributes

(或者代替MemberInfo,是MemberType吗?)为此甚至构建.

但似乎没有任何效果.

解决方法

Automapper不使用元数据提供程序,它使用Automapper.

您不需要直接调用它,只要您在Global.asax.cs中启动时将其注册到MVC,它就会被MVC自动调用,例如:

ModelMetadataProviders.Current = new MetadataProvider(
        AutoMapper.Mapper.Engine.ConfigurationProvider);

ModelValidatorProviders.Providers.Add(new ValidatorProvider(
        AutoMapper.Mapper.Engine.ConfigurationProvider);

要么:

ModelMetadataProviders.Current = new MetadataProvider(
        (AutoMapper.IConfigurationProvider)AutoMapper.Mapper.Configuration);

ModelValidatorProviders.Providers.Add(new ValidatorProvider(
        (AutoMapper.IConfigurationProvider)AutoMapper.Mapper.Configuration));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读