[英]Save List View Models to Database
我有以下視圖模型
public class MyCVViewModel
{
[Required]
[StringLength(100, ErrorMessage = "Resume Title cannot exceed 100 characters.")]
[Display(Name = "Resume Title")]
public string ResumeTitle { get; set; }
[Required]
[StringLength(1000, ErrorMessage = "Personal Statment cannot exceed 1000 characters.")]
[Display(Name = "Personal Statement")]
public string Statement { get; set; }
public List<MyCompanyViewModel> Companies { get; set; }
}
public class MyCompanyViewModel
{
[Required]
[StringLength(100, ErrorMessage = "Company Name cannot exceed 100 characters.")]
[Display(Name = "Company Name")]
public string CompanyName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "Job Title cannot exceed 100 characters.")]
[Display(Name = "Job Title")]
public string JobTitle { get; set; }
[Required]
[DataType(DataType.Date)]
[Display(Name = "Start Date")]
public DateTime JobStartDate { get; set; }
[Required]
[DataType(DataType.Date)]
[Display(Name = "End Date")]
public DateTime JobEndDate { get; set; }
[Required]
[StringLength(1000, ErrorMessage = "Job Description cannot exceed 1000 characters.")]
[Display(Name = "Job Description")]
public string JobDescription { get; set; }
}
我有一個控制器,可將公司列表保存到視圖模型中:
public ActionResult Create()
{
var model = new MyCVViewModel()
{
};
model.Companies = new List<MyCompanyViewModel>();
model.Companies.Add(new MyCompanyViewModel() { CompanyName = "Company1", JobTitle = "Gyprocker", JobDescription = "Hello" });
model.Companies.Add(new MyCompanyViewModel() { CompanyName = "Company2", JobTitle = "Gyprocker2", JobDescription = "Hello" });
model.Companies.Add(new MyCompanyViewModel() { CompanyName = "Company3", JobTitle = "Gyprocker3", JobDescription = "Hello" });
model.Companies.Add(new MyCompanyViewModel() { CompanyName = "Company4", JobTitle = "Gyprocker4", JobDescription = "Hello" });
return View("~/Views/Dashboard/CV/Create.cshtml", model);
}
現在我不確定如何將該列表視圖模型發布回數據庫,我正在使用實體框架代碼優先方法,這就是我嘗試過的方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(MyCVViewModel model)
{
if (!ModelState.IsValid)
{
return View("~/Views/Dashboard/CV/Create.cshtml", model);
}
else
{
var cv = new CV();
cv.Title = model.ResumeTitle;
cv.Statement = model.Statement;
cv.Id = User.Identity.GetUserId();
cv.Companies = new List<Company>();
foreach (var company in model.Companies)
{
cv.Companies.Add(company); //this line has error saying cannot convert viewmodel to entity
}
repository.AddCV(cv);
return RedirectToAction("List");
}
}
那么將列表視圖模型添加到數據庫的最佳方法是什么?
更新
foreach (var company in model.Companies)
{
cv.Companies.Add(
new Company
{
CompanyName = company.CompanyName,
JobTitle = company.JobTitle,
StartDate = company.JobStartDate,
EndDate = company.JobEndDate,
Description = company.JobDescription
});
}
嘗試了一下並奏效,還有其他方法嗎?
在foreach
循環中,您需要初始化一個新Company
foreach (var item in model.Companies)
{
Company company = new Company()
{
CompanyName = item.CompanyName,
JobTitle = item.JobTitle,
// etc for other properties
};
cv.Companies.Add(company);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.