如何将BLL中的属性传递给ModeView。例如,我将这个类放在一个单独的类库中:
[MetadataType(typeof(PersonMetaData))]
public partial class Person
{
[Bind(Include = "PersonId,DepartmentId,FirstName,LastName,Active,DateAdded,DateDeleted")]
public class PersonMetaData
{
public object PersonId { get; set; }
public object DepartmentId { get; set; }
public object FirstName { get; set; }
public object LastName { get; set; }
public Department PersonDepartment { get; set; }
public string FullName()
{
return string.Format("{0} {1}", FirstName, LastName);
}
}
}
我的ViewModel如下所示:
public class PersonViewModel
{
public int PersonId { get; set; }
public string FullName{ get; set; }
public string PersonDepartment { get; set; }
}
当我为PersonViewModel生成一个强类型的新“View”并设置为“List”View Content ....时会生成页面,但FullName不会通过。
我创建了PersonDepartment属性,因为我想显示此人所在的部门名称。我有类似的部门类设置。例如,我希望能够执行类似“PersonDepartment.DepartmentName”的操作,在页面上显示部门名称。
我正在使用DBML(Linq To SQL),因此部分类从自动生成的类扩展。
我不确定如何填充FullName属性并传递给ViewModel并获取与传递的Person信息相关的Department属性。任何帮助将不胜感激。
答案 0 :(得分:1)
您提到过您正在使用AutoMapper。在您的模型中FullName
是一种方法,而不是一种属性。 AutoMapper不会自动映射到方法。根据{{3}},您可以使用Get
为方法名称添加前缀,以使其生效:
public string GetFullName()
{
return string.Format("{0} {1}", FirstName, LastName);
}
这将映射到视图模型中的FullName
属性。另一种选择是明确声明映射是如何完成的:
Mapper.CreateMap<Person, PersonViewModel>()
.ForMember(
dest => dest.FullName,
opt => opt.MapFrom(src => src.FullName())
);
就部门名称属性而言,我建议您修改模型,以便代替DepartmentId
属性直接使用名为Department
的属性,其中包含允许的id和名称您可以在视图模型中轻松映射它们。如果您无法以这种方式修改模型,则视图模型中的Department
属性可以直接由存储库填充,而不是AutoMapper
填充。