簡體   English   中英

使用AutoMapper將視圖模型映射到模型接口

[英]using AutoMapper to map a viewmodel to a model interface

我在下面創建了一個AutoMapper映射配置類代碼:

public static class MilitaryBrochureViewModelMapper
{
    public static void Configure()
    {
        ConfigureMilitaryBrochureMapping();
    }

    private static void ConfigureMilitaryBrochureMapping()
    {
        Mapper.CreateMap<IBrochureModel, MilitaryBrochureViewModel>().ForMember(dest => dest.Rank, opt => opt.MapFrom(src => src.JobTitle));
    }
}

當我導航到MilitaryBrochureViewModel時,我將MilitaryBrochureViewModel中的字段Rank映射到IBrochureModel接口中的JobTitle變量,它告訴我我尚未完全實現該接口,我是否需要在視圖模型或接口中放置任何東西,或者兩者都放置才能告訴他們我已使用AutoMapper在這兩個變量之間創建映射?

以下是我正在使用的ViewModel和接口:

視圖模型

public class MilitaryBrochureViewModel : IBrochureModel
{
    [Key]
    public int Id { get; set; }

    public virtual int TestMode { get; set; }

    [DataType(DataType.Text)]
    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [Display(Name = "Salutation", Description = "Salutation_Description", GroupName = "Personal", ResourceType = typeof(Mui))]
    public string Salutation { get; set; }

    [DataType(DataType.Text)]
    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [Display(Name = "First_Name", Description = "First_Name_Description", GroupName = "Personal", ResourceType = typeof(Mui))]
    [RegularExpression(@"^([\u00c0-\u024f]|[A-z]|[']|[ ]|[\-]){2,20}$", ErrorMessageResourceName = "FirstNameRegExError", ErrorMessageResourceType = typeof(Mui))]
    public string FirstName { get; set; }

    [DataType(DataType.Text)]
    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [Display(Name = "Last_Name", Description = "Last_Name_Description", GroupName = "Personal", ResourceType = typeof(Mui))]
    [RegularExpression(@"^([\u00c0-\u024f]|[A-z]|[']|[ ]|[\-]){2,20}$", ErrorMessageResourceName = "LastNameRegExError", ErrorMessageResourceType = typeof(Mui))]
    public string LastName { get; set; }

    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email", Description = "Email_Description", GroupName = "Personal", ResourceType = typeof(Mui))]
    [RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessageResourceName = "EmailInputValidatorError", ErrorMessageResourceType = typeof(Mui))]
    public virtual string Email { get; set; }

    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [DataType(DataType.Text)]
    [Display(Name = "Military_Rank", Description = "Military_Rank_Description", GroupName = "Personal", ResourceType = typeof(Mui))]
    [StrMinLen(5)]
    [StrMaxLen(50)]
    public string Rank { get; set; }

    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [DataType(DataType.Text)]
    [Display(Name = "Company", Description = "Company_Description", GroupName = "Personal", ResourceType = typeof(Mui))]
    public string Company { get; set; }

    [Required]
    [Display(Name = "Do_Not_Pass_On", Description = "Do_Not_Pass_On_Description", GroupName = "Company", ResourceType = typeof(Mui))]
    public bool DoNotPassOn { get; set; }

    [DataType(DataType.Text)]
    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [Display(Name = "Lead_Source", GroupName = "Terms", Description = "Lead_Source_Description", ResourceType = typeof(Mui))]
    public string LeadSource { get; set; }
}

接口

public interface IBrochureModel
{
    int TestMode { get; set; }

    string Salutation { get; set; }
    string FirstName { get; set; }
    string LastName { get; set; }
    string Email { get; set; }
    string Company { get; set; }
    string JobTitle { get; set; }
    string LeadSource { get; set; }
    bool DoNotPassOn { get; set; }
}

您的界面需要成員string JobTitle { get; set; } string JobTitle { get; set; } string JobTitle { get; set; } 您在MilitaryBrochureViewModel上沒有任何這樣的成員。 C#編譯器不在乎AutoMapper將一個prop轉換為另一個prop,只是犯錯了,因為您有一個實現接口但缺少接口成員之一的類。

在您的視圖模型中添加以下行。

public string JobTitle { get; set; }

這樣,您的視圖模型將具有RankJobtitle。

您可以在視圖上控制顯示JobTitle或Ran的字段

已更改為我在此應用程序的先前版本中執行的方式,將rank更改為jobtitle,唯一的區別是顯示名稱,因為無論如何,rank和jobtitle都以jobtitle的形式發送到數據庫。

    [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "required", ErrorMessageResourceType = typeof(Mui))]
    [DataType(DataType.Text)]
    [Display(Name = "Military_Rank", Description = "Military_Rank_Description", GroupName = "Personal", ResourceType = typeof(Mui))]
    [StrMinLen(5)]
    [StrMaxLen(50)]
    public string JobTitle { get; set; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM