Zuerst, sorry für mein schlechtes Englisch. Ich bin aus Brasilien. Und ich bin ein Anfänger in .NET MVC5.MVC5 Hinzufügen von Werten zu Bind
Ich hatte eine Modellklasse Task
mit ID
plus 4 editierbare Spalten. Beim Erstellen eines neuen Task
muss der Benutzer nur 2 davon ausfüllen (TaskType
und Subject
). Die verbleibenden zwei Spalten (UserID
und CreationDate
) müssen mit Informationen aus dem System gefüllt werden: Benutzer-ID und aktuelles Datum.
Dann wird in der Create
, ich habe diese beiden Informationen in der ViewBag:
public ActionResult Create()
{
ViewBag.TaskTypeID = new DAO.TaskTypesDAO().ListOfTypes();
ViewBag.ApplicationUserId = User.Identity.GetUserId();
ViewBag.CreationDate = DateTime.Now;
return View();
}
Und in Ansicht erstellen ich ohne zeigt es zunächst, diese Informationen zu umfassen versucht:
Zuerst habe ich versuchte HiddenFor()
und nach mit DisplayFor()
@Html.LabelFor(model => model.CreationDate, "Creation Date")
@Html.DisplayFor(model => model.CreationDate)
@Html.HiddenFor(model => model.CreationDate)
@Html.LabelFor(model => model.ApplicationUserId, "Creator")
@Html.DisplayFor(model => model.User.Id)
@Html.HiddenFor(model => model.ApplicationUserId)
DisplayFor()
etwas nicht zeigen.
Und wenn ich die Post Create
Methode
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,TaskTypeID,Subject,CreationDate,ApplicationUserId")] Task task)
{
if (ModelState.IsValid)
{
db.Tasks.Add(task);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.TaskTypeID = new DAO.TaskTypesDAO().ListOfTypes();
ViewBag.ApplicationUserId = User.Identity.GetUserId();
ViewBag.CreationDate = DateTime.Now;
return View(tarefa);
}
Das Model ist ungültig und task.CreationDate und task.ApplicationUserId sind leer vor.
Wie kann diese zwei Informationen vor dem Erstellen Post binden ????
oder sonst, Wie kann nach ModelState enthalten und revalidate ??
oder .....
Sie übergeben Ihrem Modell nicht einmal ein Modell (Ihre 'HtmlHelper' Methoden binden an die Eigenschaften Ihres Modells, nicht an' ViewBag'). Aber auf jeden Fall ist das alles falsch. Sie legen die Werte von 'ApplicationUserId' und 'CreationDate' in der GET-Methode nicht fest oder enthalten keine Formularsteuerelemente für sie in der Ansicht. Sie legen sie in der POST-Methode unmittelbar vor dem Speichern des Objekts fest. Und empfehlen Sie dringend zu lesen [Was ist ViewModel in MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) –