繁体   English   中英

MVC2 ViewModel绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM