2013-08-15 2 views
-1

J'ai un ViewModel qui est rejoint par trois entités pour obtenir des données de toutes les entités dans un formulaire de vue. Bien que j'ai réussi à mettre en œuvre la même chose. Mais je n'ai aucune idée de comment éditer et sauvegarder les données dans la base de données. Mes classes de modèles sont associées par une relation un à un.Enregistrer et modifier ViewModels dans ASP.NET MVC4

Mes modèles sont les suivants:

public class Doctor 
{ 
    public int DoctorId { get; set; } 
    public string Name { get; set; } 
    public string Speciality { get; set; } 

    public virtual DoctorAddress DoctorAddress { get; set; } 
    public virtual DoctorCharge DoctorCharge { get; set; } 
    public virtual DoctorAvailablity DoctorAvailablity { get; set; } 

} 

public class DoctorAddress 
{ 
    public int DoctorId { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 

    public virtual Doctor Doctor { get; set; } 
} 

public class DoctorCharge 
{ 
    public int DoctorId { get; set; } 
    public decimal OPDCharge { get; set; } 
    public decimal IPDCharge { get; set; } 

    public virtual Doctor Doctor { get; set; } 
} 

Mon ViewModel est:

public class DoctorViewModel 
{ 
    public Doctor Doctor { get; set; } 
    public DoctorAddress DoctorAddress { get; set; } 
    public DoctorCharge DoctorCharge { get; set; } 


    //Doctor attributes 
    public int DoctorId { get; set; } 
    public string Name { get; set; } 
    public string Speciality { get; set; } 
    public DateTime DateOfJoinig { get; set; } 

    //DoctorAddress attributes 
    public string Address { get; set; } 
    public string Area { get; set; } 
    public string City { get; set; } 

    //DoctorCharge attributes 
    public decimal OPDCharge { get; set; } 
    public decimal OPDRevisitCharge { get; set; } 


} 

Mon contrôleur est:

[HttpPost] 
    public ActionResult Create(DoctorDetailsViewModel doctorViewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      var d = new Doctor() 
      { 
       Name =doctorViewModel.Doctor.Name, 
       Speciality = doctorViewModel.Speciality, 
       DateOfJoinig = doctorViewModel.DateOfJoinig 

      }; 

      var da = new DoctorAddress() 
      { 
       DoctorId = doctorViewModel.DoctorId, 
       Address = doctorViewModel.Address, 
       City = doctorViewModel.City 
      }; 


      var dc = new DoctorCharge() 
      { 
       DoctorId = doctorViewModel.DoctorId, 
       OPDCharge = doctorViewModel.OPDCharge, 
       OPDRevisitCharge = doctorViewModel.OPDRevisitCharge 
      }; 

      db.Doctors.Add(d); 
      db.DoctorAddress.Add(da); 
      db.DoctorCharges.Add(dc); 

      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(doctorViewModel); 
    } 

My View est:

@model HospitalManagementSystem.Models.Doctor 

@{ 
ViewBag.Title = "Create"; 
} 

<fieldset> 
<legend>Doctor</legend> 

<div class="editor-label"> 
    Name 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Name) 
</div> 
<div class="editor-label"> 
    Speciality 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Speciality) 
</div> 
<div class="editor-label"> 
    DateOfJoinig 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.DateOfJoinig) 
</div> 
<div class="editor-field"> 
     @Html.HiddenFor(model => model.DoctorId) 
</div> 

<div class="editor-label"> 
    Address 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.DoctorAddress.Address) 
</div> 
<div class="editor-label"> 
    Area 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.DoctorAddress.Area) 
</div> 
<div class="editor-label"> 
    City 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.DoctorAddress.City) 
</div> 
<div class="editor-field"> 
     @Html.HiddenFor(model => model.DoctorId) 
</div> 

<div class="editor-label"> 
    OPD Charge 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.DoctorCharge.OPDCharge) 
</div> 

<div class="editor-label"> 
    OPDRevisitCharge 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.DoctorCharge.OPDRevisitCharge) 
</div> 
<p> 
    <input type="submit" value="Create" /> 
</p> 
</fieldset>   
} 

Je reçois un message d'erreur sur l'enregistrement: « L'élément de modèle passé dans le dictionnaire est de type HM.ViewModels.DoctorDetailsViewModel, mais ce dictionnaire nécessite un élément de modèle de type HM.Models.Doctor »

S'il vous plaît aidez-moi comment dois-je faire. Merci d'avance.

+0

Je reçois un message d'erreur concernant l'enregistrement de: "L'élément de modèle passé dans le dictionnaire est de type « HM.ViewModels.DoctorDetailsViewModel », mais ce dictionnaire nécessite un élément de modèle de type "HM.Models.Doctor" ". – Jaan

Répondre

0

Cette ligne:

@model HospitalManagementSystem.Models.Doctor 

Les allégations selon lesquelles la vue attend un ViewModel de type Doctor (entité), mais cette ligne:

return View(doctorViewModel); 

passe en fait un objet DoctorDetailsViewModel comme ViewModel.

Essayez de changer votre type de ViewModel à DoctorDetailsViewModel:

@model DoctorDetailsViewModel 
+0

J'ai essayé de changer le même que vous avez dit, mais les données ne sont pas enregistrées et redirigées vers la même page lorsque je clique sur "Créer". Aucun signe d'erreur! – Jaan

+0

Il se peut que votre 'ModelState.IsValid' soit faux. – haim770