簡體   English   中英

將列表視圖模型保存到數據庫

[英]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.

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