Ich habe drei Modelle, die zusammenkommen, um ein Ansichtsmodell zu erstellen, und ich möchte dieses Ansichtsmodell bearbeiten können, wenn ich auf "Bearbeiten" klicke. Ich kann kein einfaches Beispiel dafür finden, wie das funktioniert (überall).Wie aktualisiere ich ein Ansichtsmodell von einer Bearbeitungsseite in MVC3?
Ich bin mir nicht sicher, ob ich den richtigen Weg gehe. Ich kann die Daten einsehen. An diesem Punkt kann ich es nicht speichern.
Jede Hilfe wäre willkommen.
Danke!
Modelle:
public class Person
{
[Key]
public int Id { get; set; }
[MaxLength(20)]
[Required(ErrorMessage = "First name is required.")]
public string FirstName { get; set; }
[MaxLength(20)]
[Required(ErrorMessage = "Last name is required.")]
public string LastName { get; set; }
[MaxLength(40)]
[Required(ErrorMessage = "Email is required.")]
public string Email { get; set; }
[MaxLength(20)]
[DataType(DataType.PhoneNumber)]
public string Phone { get; set; }
public bool Active { get; set; }
}
public class ClientContact
{
[Key]
[ForeignKey("Person")]
public int ClientPersonId { get; set; }
public int ClientId { get; set; }
[MaxLength(40)]
public string Title { get; set; }
public Person Person { get; set; }
[ForeignKey("ClientId")]
public Client Client { get; set; }
}
public class Client
{
[Key]
public int ClientId { get; set; }
public string Name { get; set; }
public bool Active {get;set;}
}
Ansicht Modell:
public class ClientContactViewModel
{
private SimplexDB db = new SimplexDB();
public ClientContactViewModel()
{
}
public ClientContactViewModel(int id)
{
ClientPersonId = id;
InitializeClientContact();
}
public int ClientPersonId { get; set; }
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = " Last Name")]
public string LastName { get; set; }
[Display(Name = "Title")]
public string Title { get; set; }
[Display(Name = "Email Address")]
public string Email { get; set; }
[Display(Name = "Phone")]
public string Phone { get; set; }
[Display(Name = "Client Name")]
public int ClientId { get; set; }
public SelectList Clients
{
get
{
return new SelectList(db.Clients, "ClientId", "Name");
}
}
private void InitializeClientContact()
{
var contact = db.ClientPersons.Include("Person").Where(x => x.ClientPersonId == ClientPersonId).SingleOrDefault();
if (contact != null)
{
FirstName = contact.Person.FirstName;
LastName = contact.Person.LastName;
Title = contact.Title;
Email = contact.Person.Email;
Phone = contact.Person.Phone;
ClientId = contact.ClientId;
}
}
}
Controller:
public class ClientContactController : Controller
{
private database db = new database();
//
// GET: /ClientContact/Edit/5
public ActionResult Edit(int id)
{
return View(new ClientContactViewModel(id));
}
//
// POST: /ClientContact/Edit/5
[HttpPost]
public ActionResult Edit(ClientContactViewModel model)
{
if (ModelState.IsValid)
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
}
Ich erhalte eine Fehlermeldung bei der db.Entry (Modell) .State ... " Der Entitätstyp ClientContactViewModel ist nicht Teil des Modells für den aktuellen Kontext. "
Wie würde ich das machen? Tut mir leid, ich bin neu in diesem Bereich. –
Siehe meine aktualisierte Antwort. – jrummell
Um klar zu sein, muss ich mein Ansichtsmodell basierend auf dem Code, den Sie oben geschrieben haben, aktualisieren? Danke für Ihre Hilfe. –