Achtung: Diese Frage ist über neun Jahre alt!
Am besten suchen Sie nach neueren Fragen oder nach den Antworten unten, um nach Ihrer spezifischen Version von MVC zu suchen, da viele Antworten hier jetzt veraltet sind.
Wenn Sie eine Antwort finden, die für Ihre Version funktioniert, stellen Sie sicher, dass die Antwort die von Ihnen verwendete MVC-Version enthält.
(Die ursprüngliche Frage beginnt unten)
Das scheint mir ein bisschen bizarr zu sein, aber soweit ich das beurteilen kann, machst du es so.
Ich habe eine Sammlung von Objekten und möchte, dass Benutzer eines oder mehrere davon auswählen. Das sagt mir "Formular mit Kontrollkästchen". Meine Objekte haben kein Konzept von "ausgewählt" (sie sind rudimentäre POCOs, die durch Deserialisieren eines wcf-Aufrufs gebildet werden). Also mache ich folgendes:
public class SampleObject{
public Guid Id {get;set;}
public string Name {get;set;}
}
In der Ansicht:
<%
using (Html.BeginForm())
{
%>
<%foreach (var o in ViewData.Model) {%>
<%=Html.CheckBox(o.Id)%> <%= o.Name %>
<%}%>
<input type="submit" value="Submit" />
<%}%>
Und in der Steuerung ist dies die einzige Möglichkeit, um herauszufinden, welche Objekte der Benutzer überprüft hat:
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
Es ist in erster Linie verrückt, und zweitens listet die FormCollection für die vom Benutzer überprüften Elemente ihren Wert als "wahr falsch" und nicht nur als wahr auf.
Offensichtlich fehlt mir etwas. Ich denke, dies basiert auf der Idee, dass die Objekte in der Sammlung, auf die im HTML-Formular reagiert wird, mit aktualisiert werdenUpdateModel()
reagiert wird, oder über einen ModelBinder .
Aber meine Objekte sind nicht dafür eingerichtet; Bedeutet das, dass dies der einzige Weg ist? Gibt es einen anderen Weg, es zu tun?