【发布时间】:2014-02-23 11:09:33
【问题描述】:
我需要澄清如何实现 Betty 的代码解决方案,以使用 AutoMapper 将数据注释元数据传输到 ViewModel(请参阅 here)。或者如果你有更好的方法,请分享。也许对熟悉 AutoMapper 的人来说,Betty 的答案的实现是显而易见的,但我是新手。
这是一个简单的例子,我应该在这段代码中添加什么来使 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 吗?)甚至可以构建。
但似乎没有任何效果。
【问题讨论】:
标签: asp.net-mvc automapper modelmetadata modelmetadataprovider