[英]MVC2 ViewModel Binding
如何将我的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属性。 任何帮助将不胜感激。
您已经提到过您正在使用AutoMapper 。 在您的模型中, FullName
是一个方法而不是属性。 AutoMapper不会自动映射到方法。 根据惯例,您可以在方法名称前加上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
填充。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.