gpt4 book ai didi

asp.net-mvc - 如何使用 Betty 的方法使用 AutoMapper 将 DataAnnotation 元数据传输到 ViewModel

转载 作者:行者123 更新时间:2023-12-02 04:05:27 27 4
gpt4 key购买 nike

我需要澄清如何实现 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));

关于asp.net-mvc - 如何使用 Betty 的方法使用 AutoMapper 将 DataAnnotation 元数据传输到 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21468503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com