Von meinen zwei Modellen Student
und InventoryRecord
. Ich habe ein ViewModel namens TestViewModel
erstellt. Ich bin verwirrt, wie schreibe ich meinen Controller?Führen Sie CRUD in Controller mit ViewModel in ASP.NET MVC
public class TestViewModel
{
//from Student model
[Key]
public string UserID { get; set; }
public string PhoneNumber{ get; set; }
public string Address{ get; set; }
//other properties
//from Inventory model
public string FathersName { get; set; }
public string FathersAddress { get; set; }
//other properties
}
Als ich meine nur Student
Hauptmodell bin. So schreibe ich meinen Controller:
// GET: Students/CreateEdit
public ActionResult InventoryRecord()
{
var currentUserId = User.Identity.GetUserId();
var newid = db.Students.FirstOrDefault(d => d.UserID == currentUserId);
if (newid == null)
{
newid = db.Students.Create();
newid.UserID = currentUserId;
db.Students.Add(newid);
}
Student student = db.Students.Find(newid.UserID);
if (student == null)
{
return HttpNotFound();
}
return View(student);
}
// POST: Students/CreateEdit
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult InventoryRecord(Student student)
{
var currentUserId = User.Identity.GetUserId();
var userName = User.Identity.GetUserName();
var u = db.Students.FirstOrDefault(d => d.UserID == currentUserId);
if (u == null)
{
u = db.Students.Create();
u.UserID = currentUserId;
db.Students.Add(u);
}
if (ModelState.IsValid)
{
u.PhoneNumber = student.PhoneNumber;
u.Address = student.Address;
//other properties
db.SaveChanges();
TempData["Message"] = "User: " + userName + ", details successfully updated!";
}
return View(student);
}
Jetzt bin ich wirklich verwirrt, wie hier vorzugehen. Wie sollte ich meinen Controller schreiben, wenn ich meine TestViewModel
verwende? Jemand bitte zeigen Sie mir in die richtige Richtung. Vielen Dank.
zuerst die '[Key]' Attribut entfernen (das EF verwandt ist, nicht anzeigen Modelle). In Ihrer POST-Methode initialisieren Sie neue Instanzen Ihrer Datenmodelle (oder wenn Ihre Daten bestehen, dann erhalten Sie die Datenmodelle aus der Datenbank basierend auf der ID) und legen ihre Eigenschaften basierend auf den Werten in den Ansichtsmodellen fest und speichern sie die Datenmodelle. –
In Ihrer POST-Methode sollten Sie ein Instanzobjekt von TestViewModel erstellen und es mit gebuchten Daten in Ihrer Aktion füllen .. Das ist alles! – praguan