我希望您能够帮助我解决我正在开发的测试 ASP.NET MVC 应用程序中遇到的 Automapper 问题。
我环顾四周,找不到与我试图通过嵌套 ViewModel 实现的目标完全一样的东西。
基本上,我有这 2 个领域模型……</p>
namespace Test.Domain.Entities
{
public class Contact
{
[HiddenInput(DisplayValue = false)]
[Key]
public int ID { get; set; }
public Name Name { get; set; }
public string Contact_Landline { get; set; }
public string Contact_Mobile { get; set; }
[DataType(DataType.EmailAddress)]
public string Contact_Email { get; set; }
}
}
和..
namespace Test.Domain.Entities
{
public class Name : DisplayableModel
{
[HiddenInput(DisplayValue = false)]
[Key]
public int ID { get; set; }
public string Name_Forename { get; set; }
public string Name_Surname { get; set; }
public string GetFullName()
{
return Name_Forename + ' ' + Name_Surname;
}
}
}
我有这 2 个 ViewModel……</p>
namespace Test.WebUI.Models
{
public class ContactViewModel :
{
[HiddenInput(DisplayValue = false)]
[Key]
public int ID { get; set; }
public NameViewModel Name { get; set; }
public string Contact_Landline { get; set; }
public string Contact_Mobile { get; set; }
[DataType(DataType.EmailAddress)]
public string Contact_Email { get; set; }
}
}
还有……</p>
namespace Test.WebUI.Models
{
public class NameViewModel
{
[HiddenInput(DisplayValue = false)]
[Key]
public int ID { get; set; }
public string Name_Forename { get; set; }
public string Name_Surname { get; set; }
}
}
我想将 ContactViewModel 返回到我的视图,其中 Name 属性填充了填充 Contact 域对象的 Name 属性。
我的控制器中有这段代码……</p>
Mapper.CreateMap<Name, NameViewModel>();
Mapper.CreateMap<Contact, ContactViewModel>();
var contact = Mapper.Map<Contact, ContactViewModel>(repository.Contact.Where(c => c.ID == id).Single());
return View(contact);
这是我遇到问题的地方,我的 Name 属性永远不会被填充。
我选择以这种方式设计我的应用程序的原因是因为我的视图由自定义模型模板组成,因此我可以一致地呈现 NameViewModel 对象而无需重复代码,就像在这个简单的示例中一样......</p>
@model Test.WebUI.Models.NameViewModel
First
@Model.Name_Forename
Last
@Model.Name_Surname
如果有人可以帮助向我解释我应该如何使用 AutoMapper 填充 ContactViewModel 的 NameViewModel 对象,我将不胜感激。
谢谢。吉姆