2011-08-11 34 views
2

我有一个客户类&我希望以CSV格式显示客户电子邮件字段以显示管理列表视图。当编辑视图显示时,我希望视图显示文本框中的电子邮件与新行字符Feed分开。如何在AutoMapper中为同一类型调用不同的映射策略?

我不希望每个视图有两个不同的类只是使用相同的,第一个使用IEnumerable<T>来显示列表。我的班级非常大,我不希望有2个独立的视图类来管理。

理想的目标是为每个不同的映射场景创建2个不同的AutoMapper映射1,而不仅仅限于在引导阶段使用CreateMap创建的映射。我如何实现这一目标?实际上,我想根据代码中的位置来切换映射策略。

回答

1

理想情况下,您可以使用两种不同的“查看模型”并将源映射到所需的目标。然而,如果你不想走这条路线,一个选择就是创建一个具有两个只读属性的视图模型。

public class SomeClassViewModel 
{ 
    public string FirstName { get; set;} 

    public string LastName { get; set; } 

    public string Emails { get; set; } 

    public string EmailsCSV 
    { 
     get 
     { 
      var csv = Emails; 
      //Do CSV transform here 
      return csv; 
     } 
    } 

    public string EmailsCRLF 
    { 
     get 
     { 
      var crlf = Emails; 
      //Do crlf transform here 
      return crlf; 
     } 
    } 

} 

再一次,理想情况下,您应该坚持每个视图的一个模型的规则。这并不意味着你需要为每个模型写一个全新的视图,总是有继承。

MyViewModelA : MyViewModelBase 
MyViewModelB : MyViewModelBase 
相关问题