2

我想知道解决这个问题的正确方法是什么。我目前有一个模型 - (如下所示),其中包含我记录所需的所有字段。

我的问题是,在创建记录时,我只需要传递 CustomerID、EmployeeID、Date 和 ArrivalTime 的数据。

模型中的其余字段将在稍后更新记录时填充。

由于我的某些字段是必需的,如果我不发布这些字段的数据,这显然会导致验证错误。

我想知道实现这一目标的最佳做法是什么?

我应该将模型分成两部分吗?还是可以进行部分验证?

public class CustomerSupportRecord
{
    public int CustomerSupportRecordID { get; set; }

    [Required]
    public int CustomerID { get; set; }

    [Required]
    public string EmployeeID { get; set; }

    [Required(ErrorMessage = "Please enter a Date")]
    [DataType(DataType.Date)]
    [Display(Name = "Date")]
    public DateTime Date { get; set; }

    [Required(ErrorMessage = "Please select an Arrival Time")]
    [DataType(DataType.Time)]
    [Display(Name = "Arrival")]
    public DateTime ArrivalTime { get; set; }

    [Required(ErrorMessage = "Please select a Departure Time")]
    [DataType(DataType.Time)]
    [Display(Name = "Departure")]
    public DateTime DepartureTime { get; set; }

    [Required(ErrorMessage = "Please select a Type")]
    [Display(Name = "Type")]
    public int CustomerSupportTypeID { get; set; }

    [Display(Name = "Setting")]
    public string ReflectionSetting { get; set; }

    [Display(Name = "Advisor")]
    public string ReflectionAdvisor { get; set; }

    [Display(Name = "Notes")]
    public string Notes { get; set; }

    [Display(Name = "Comments")]
    public string Comments { get; set; }

    // Navigation Properties
    public virtual Customer Customer { get; set; }
    public virtual CustomerSupportType CustomerSupportType { get; set; }
    public virtual Employee Employee { get; set; }
}
4

1 回答 1

1

正确的方法是为不同的视图使用不同的视图模型类,并且只包含您在该视图上需要的属性。

因此,您的第一个视图的视图模型如下所示:

public class CustomerSupportRecordForCreation
{
    public int CustomerSupportRecordID { get; set; }

    [Required]
    public int CustomerID { get; set; }

    [Required]
    public string EmployeeID { get; set; }

    [Required(ErrorMessage = "Please enter a Date")]
    [DataType(DataType.Date)]
    [Display(Name = "Date")]
    public DateTime Date { get; set; }

    [Required(ErrorMessage = "Please select an Arrival Time")]
    [DataType(DataType.Time)]
    [Display(Name = "Arrival")]
    public DateTime ArrivalTime { get; set; }
}

您必须在该视图模型类和您的域/dal 类之间进行映射。这就是AutoMapper等工具派上用场的地方。

编辑自动映射器:

使用 Automapper 非常简单。

  1. 您必须配置您的映射(即 in Application_Start)。当您要映射的类的属性名称相同时,它很简单:

    Mapper.CreateMap<CustomerSupportRecord, 
                         CustomerSupportRecordForCreation>();
    
  2. 然后你可以在你的应用程序中使用映射。当你有一个CustomerSupportRecord并且想要返回CustomerSupportRecordForCreation你的视图时,写:

    CustomerSupportRecord record = getRecordFromDb...
    return View(Mapper.Map<CustomerSupportRecordForCreation>(record));
    

关于 Codeproject 有一篇很好的教程文章:http: //www.codeproject.com/Articles/61629/AutoMapper或者只是谷歌

于 2012-11-22T10:39:07.313 回答