我可以帮您翻译成简体中文:
我已经创建了一个视图模型来处理编辑、详细和创建操作: CompanyViewModel.cs
我在控制器中使用AutoMapper来在模型和视图模型之间进行映射,一切都正常运行。但是,我现在想在地址对象上使用验证 - 我不希望在没有地址的情况下创建公司。
我的第一个想法是简单的路线 - 我尝试在Address属性上放置"[Required]"注释。这并没有起作用。
然后我认为最好摆脱Address属性,并在视图模型中抽象出该数据,因此我为Address类中的所有属性添加了视图模型的属性:
这导致我的控制器里有很多额外的代码,而不是一个漂亮的一行AutoMapper语句...那么处理视图模型中嵌套模型验证的正确方法是什么?
在视图模型中直接公开Address属性是好的做法,还是像我所做的那样用单独的属性将其抽象出来更好?
当源和目标不完全匹配时,AutoMapper能够工作吗?
我有一个应用程序,其中包含一个公司模型。公司模型与地址模型具有导航属性(一对一关系):
Company.cs
public class Company
{
public int CompanyID { get; set; }
public string Name { get; set; }
// Snip...
public virtual Address Address { get; set; }
}
我已经创建了一个视图模型来处理编辑、详细和创建操作: CompanyViewModel.cs
public class CompanyViewModel
{
public int CompanyID { get; set; }
[Required]
[StringLength(75, ErrorMessage = "Company Name cannot exceed 75 characters")]
public string Name { get; set; }
// Snip...
public Address Address { get; set; }
}
我在控制器中使用AutoMapper来在模型和视图模型之间进行映射,一切都正常运行。但是,我现在想在地址对象上使用验证 - 我不希望在没有地址的情况下创建公司。
我的第一个想法是简单的路线 - 我尝试在Address属性上放置"[Required]"注释。这并没有起作用。
然后我认为最好摆脱Address属性,并在视图模型中抽象出该数据,因此我为Address类中的所有属性添加了视图模型的属性:
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
// etc....
这似乎是一个不错的练习,但现在我的AutoMapper无法将这些属性映射到Company类的Address对象中,因此我不得不在控制器中手动映射:
public ActionResult Details(int id = 0)
{
// Snip code retrieving company from DB
CompanyViewModel viewModel = new CompanyViewModel();
viewModel.Name = company.Name;
viewModel.Address1 = company.Address.Address1;
// Snip...
return View(viewModel);
}
这导致我的控制器里有很多额外的代码,而不是一个漂亮的一行AutoMapper语句...那么处理视图模型中嵌套模型验证的正确方法是什么?
在视图模型中直接公开Address属性是好的做法,还是像我所做的那样用单独的属性将其抽象出来更好?
当源和目标不完全匹配时,AutoMapper能够工作吗?