뷰 모델 클래스를 사용하여 데이터 삽입
모델 클래스 ::
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.cshtml
를 MappedModels
사용 하기위한 페이지를 만들었습니다 . 이제 양식을 제출하려고하면 오류가 발생합니다.
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 increment 수 MappedId
있습니다 .
어떻게 사용하여 데이터를 삽입 MappedViewModels
에 MappedModels
?
솔루션에서 제안했듯이 ::
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 클래스로 인해 발생합니다. 도와주세요!!!
답변
아래와 같이 액션 로직을 업데이트하십시오.
[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")]
나는 그것이 필요하다고 생각하지 않는 용도는 무엇입니까? 나는 그것을 사용하지 않았습니다.