Wie zu Bearbeiten und zu Speichern ViewModels Daten zurück in die Datenbank

Habe ich ein ViewModel, das sich mit drei Einheiten, um Daten aus allen Entitäten, die in einem Formular anzeigen. Obwohl ich gelungen, die Umsetzung der gleichen. Aber ich habe keine Ahnung, wie das Bearbeiten und Speichern der Daten zurück in die Datenbank. Meine model-Klassen verbunden sind durch die eins-zu-eins-Beziehung.

Meine Modelle sind:

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 string Address { get; set; }
    public string City { get; set; }
    public int DoctorId { get; set; }

    public virtual Doctor Doctor { get; set; }
}

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

    public virtual Doctor Doctor { get; set; }
}

Mein ViewModel:

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

    }

Mein Controller ist:

public ActionResult Index()
    {
        var model = from t1 in db.Doctors
                    join d in db.DoctorAddress on t1.DoctorId equals  d.DoctorId into listi
                    join dc in db.DoctorCharges on t1.DoctorId equals dc.DoctorId into listj

                    from d in listi.DefaultIfEmpty()
                    from dc in listj.DefaultIfEmpty()

                    select new DoctorDetailsViewModel.DoctorViewModel { Doctor = t1, DoctorAddress = d, DoctorCharge = dc };

        return View(model.ToList());

    }

Meine Ansicht ist:

@model XXX.DoctorDetailsViewModel.DoctorViewModel

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>Doctor</legend>

    <div class="editor-label">
       Name
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Doctor.Name)
    </div>

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

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

Meine Controller-Klasse:

public ActionResult Create()
    {
        return View();
    }

    //
    //POST: /Doctor/Create

    [HttpPost]
    public ActionResult Create(Doctor doctor)
    {
        if (ModelState.IsValid)
        {
            db.Doctors.Add(doctor);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(doctor);
    }

Mir bitte helfen wie ich das mache. Vielen Dank im Voraus.

  • Sie haben im Grunde bekam es. Deine action-Methode Erhalt der POST erhalten sollte, die den gleichen Typ wie das view-Modell, d.h. DoctorViewModel. Das Modell Bindung der MVC-Framework wird automatisch die Zuordnung der input-Felder der entsprechenden Eigenschaften in der Ansicht Modell-basierend auf Ihren Namen.
  • Wie können Arzt und DoctorCharge Personen können eine eins-zu-eins-Beziehung?
  • Der Arzt-Klasse hat eine DoctorCharge Eigenschaft und Umgekehrt.
  • Hab mein Kommentar helfen, die Dinge erklären oder haben Sie weitere Fragen?
  • Für die edition arbeiten, haben Sie, um Ihre DoctorId in einem versteckten Feld, oder Sie werden am Ende die Schaffung neuer Doktor, jedes mal, wenn Sie sparen. z.B. Html.HiddenFor(model => model.Doctor.DoctorId)
  • Nein, ich bin immer Fehler:
  • Fehler : Die aktuelle Anforderung für die Aktion "erstellen" auf controller-Typ 'DoctorController' ist mehrdeutig zwischen folgenden Maßnahmen Methoden: System.Web.Mvc.ActionResult Create(HMS.Modelle.Arzt) auf Typ HMS.Controller.DoctorController System.Web.Mvc.ActionResult Create(HMS.ViewModels.DoctorDetailsViewModel) auf Typ HMS.Controller.DoctorController
  • Sie haben gebeten, 8 Fragen, so weit, hatte Antworten auf 5 von Ihnen, und haben Sie nicht bekommen feedback auf eine einzelne vorgeschlagene Antwort. Haben keine Antworten auf Ihre Fragen Ihnen geholfen, so weit?

InformationsquelleAutor Jaan | 2013-08-14
Schreibe einen Kommentar