Hallo 😃
ich habe in einem MS Tutorial folgende Funktion (MVC Anwendung) gefunden:
[HttpPost]
public ActionResult Edit(int id, FormCollection formCollection, string[] selectedCourses)
{
// Hier unwichtiger Funktionsbody
}
Ich vermute ja, mal, dass es damit zu tun hat, dass es sich bei selectedCourses um Daten aus einer CheckBox Gruppe handelt, aber die genaue Bedeutung wird mir nicht klar, zumal formCollection auch im Funktionsbody überhaupt nicht vorkommt ...
In der HTML Seite mit dem Formular kommt formCollection auch nicht vor.
Scheint wohl irgendwie ein allgemeines Vorgehen zu sein.
Wäre mal jemand so freundlich und könnte mir das in ein zwei Sätzen erklären?
Danke
LG Mirco
Hallo CoderboyPB,
kurz gesagt enthält formCollection
ein Key-Value-Pair-Aufzählung aller übermittelten Formularwerte.
Eine beispielhafte Verwendung der FormCollection
-Klasse findest du hier: How can a formcollection be enumerated in ASP.NET MVC?.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Danke für die schnelle Antwort 😃
Verstehe ich das richtig, dass dieses Objekt automatisch bei Multipart Formular Daten (also z.B. Checkboxen oder multiple Select Boxen) mit übergeben werden, und deshalb von der Funktionssignatur erwartet werden, auch wenn man sie nicht verwendet?
Du brauchst eigentlich keine Formcollection bei MVC.
Die FormCollection enthalt alle Daten der Felder innerhalb der abgesendeten Form. Man kann sich dann (umständlich) raussuchen, was man braucht.
Wenn Du eine Klasse hast, die die Form repräsentiert - also die Properties der Klasse entsprechen den Input-Feldern der Form - dann wird das alles automatisch gemappt. (Das würde sich hier auch mit den selectedCourses anbieten.
public ActionResult Submit( FormCollection formCollection )
{
// Fiktiv:
Console.WriteLine( "Der Vorname lautet: " + formCollection["Vorname"]); // Vorher prüfen, obs überhaupt existiert
}
besser ist jedoch
public class FormSubmitModel
{
public String Vorname { get; set; }
public String Nachname { get; set; }
// ...
}
public ActionResult Submit( FormSubmitModel submitModel )
{
// ...
// Fiktiv:
Console.WriteLine( "Der Vorname lautet: " + submitModel .Vorname);
}
oder wenns nur 1-2 Werte sind
public ActionResult Submit( String vorname, String nachname )
{
// ..
// Fiktiv:
Console.WriteLine( "Der Vorname lautet: " + vorname);
}
Es bietet sich aber immer an, mit ViewModels und SubmitModels zu arbeiten - IMMER.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code