memasukkan data menggunakan kelas model tampilan

Aug 20 2020

Kelas model ::

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; }
    }

Lihat Kelas Model ::

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; }  
}

Saya telah membuat Create.cshtmlhalaman untuk MappedModelsmenggunakan MappedViewModels. Sekarang ketika saya mencoba mengirimkan formulir, saya mendapatkan kesalahan:

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'.

Metode buat pengontrol saya ::

[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);
}

Jika saya mengubah metode menjadi public ActionResult Create( MappedViewModels mappedModels), kemudian mendapatkan kesalahandb.Mappeds.Add(mappedModels)

Saya harus menggunakan bidang MappedViewModelsdalam public ActionResult Create(int? ProjectId).

Juga, saya MappedViewModelstidak mengandung atribut MappedId, jika saya tetap di sana (MappedViewModels) juga bagaimana bisa MappedIdmenjadi kenaikan otomatis .

Jadi bagaimana cara memasukkan data menggunakan MappedViewModelsto MappedModels?

Seperti yang disarankan dalam solusi, saya mencoba ::

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);
}

Tapi mendapatkan kesalahan Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.. Ini disebabkan karena kelas Proyek di mana ada beberapa bidang yang diperlukan. Tolong bantu!!!

Jawaban

1 SowmyadharGourishetty Aug 20 2020 at 10:37

Perbarui logika tindakan Anda seperti di bawah ini

[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);
}

Apa gunanya [Bind(Include = "MappedType,MappedAmount,ProjectId")]saya rasa itu tidak diperlukan. Saya tidak pernah menggunakannya.