뷰 모델 클래스를 사용하여 데이터 삽입

Aug 20 2020

모델 클래스 ::

public class MappedModels
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int MappedId { get; set; }
        public int MappedType { get; set; }
        public decimal MappedAmount { get; set; }
        
        [ForeignKey("ProjectId")]
        public ProjectModels Project { get; set; } 
        public int ProjectId { get; set; }
    }

보기 모델 클래스 ::

public class MappedViewModels
    {
        public int MappedType { get; set; }
        public decimal MappedAmount { get; set; }
        public int ProjectId { get; set; }
        public string ProjectName { get; set; }
        
        // these two fields only in MappedViewModels for calculation purpose
        public decimal ProjectAllocatedAmount { get; set; } 
        public decimal RemainingAmount { get; set; }  
}

MappedViewModels Create.cshtmlMappedModels사용 하기위한 페이지를 만들었습니다 . 이제 양식을 제출하려고하면 오류가 발생합니다.

The model item passed into the dictionary is of type 'myapp.Models.MappedModels', but this dictionary requires a model item of type 'myapp.ViewModels.MappedViewModels'.

내 컨트롤러 만들기 방법 ::

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "MappedId,MappedType,MappedAmount,ProjectId")] MappedModels mappedModels)
{
    if (ModelState.IsValid)
    {
        db.Mappeds.Add(mappedModels);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(mappedModels);
}

방법을으로 변경하면 public ActionResult Create( MappedViewModels mappedModels)오류가 발생합니다.db.Mappeds.Add(mappedModels)

나는 분야 사용해야 MappedViewModels에서을 public ActionResult Create(int? ProjectId).

또한, MappedViewModels속성을 포함하지 않습니다. MappedId(MappedViewModels) 거기에 유지하면 어떻게 auto incrementMappedId있습니다 .

어떻게 사용하여 데이터를 삽입 MappedViewModelsMappedModels?

솔루션에서 제안했듯이 ::

public ActionResult Create([Bind(Include = "MappedType,MappedAmount,ProjectId")] MappedViewModels model)
{
    if (ModelState.IsValid)
    {
        var dbMappedModel = new MappedModels
        {
          MappedType = model.MappedType,
          MappedAmount = model.MappedAmount,
          ProjectId = model.ProjectId
        }

        db.Mappeds.Add(dbMappedModel);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(mappedModels);
}

그러나 오류가 발생 Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.합니다. 여러 필수 필드가있는 Project 클래스로 인해 발생합니다. 도와주세요!!!

답변

1 SowmyadharGourishetty Aug 20 2020 at 10:37

아래와 같이 액션 로직을 업데이트하십시오.

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "MappedType,MappedAmount,ProjectId")] MappedViewModels model)
{
    if (ModelState.IsValid)
    {
        // when you add to the context, create a new MappedModels object
        // You need not to worry about the MappedId, it will be auto incremented
        var dbMappedModel = new MappedModels
        {
          MappedType = model.MappedType,
          MappedAmount = = model.MappedAmount,
        
          Project = new ProjectModels { ... }
        }

        db.Mappeds.Add(dbMappedModel);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(mappedModels);
}

[Bind(Include = "MappedType,MappedAmount,ProjectId")]나는 그것이 필요하다고 생각하지 않는 용도는 무엇입니까? 나는 그것을 사용하지 않았습니다.