Attenzione: questa domanda ha più di nove anni!
L'opzione migliore è cercare domande più recenti o cercare le risposte di seguito alla ricerca della versione specifica di MVC, poiché molte risposte qui sono ormai obsolete.
Se trovi una risposta che funziona per la tua versione, assicurati che la risposta contenga la versione di MVC che stai utilizzando.
(La domanda originale inizia di seguito)
Questo mi sembra un po 'strano, ma per quanto ne so, è così che lo fai.
Ho una raccolta di oggetti e desidero che gli utenti selezionino uno o più di essi. Questo mi dice "modulo con caselle di controllo". I miei oggetti non hanno alcun concetto di "selezionato" (sono rudimentali POCO formati deserializzando una chiamata wcf). Quindi, faccio quanto segue:
public class SampleObject{
public Guid Id {get;set;}
public string Name {get;set;}
}
Nella vista:
<%
using (Html.BeginForm())
{
%>
<%foreach (var o in ViewData.Model) {%>
<%=Html.CheckBox(o.Id)%> <%= o.Name %>
<%}%>
<input type="submit" value="Submit" />
<%}%>
E, nel controller, questo è l'unico modo che posso vedere per capire quali oggetti ha controllato l'utente:
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
È strano in primo luogo, e in secondo luogo, per quegli elementi controllati dall'utente, FormCollection elenca il suo valore come "vero falso" piuttosto che solo vero.
Ovviamente, mi manca qualcosa. Penso che questo sia costruito pensando all'idea che gli oggetti nella raccolta su cui si agiscono all'interno del modulo html vengono aggiornati utilizzando UpdateModel()
o tramite un ModelBinder.
Ma i miei oggetti non sono predisposti per questo; significa che questo è l'unico modo? C'è un altro modo per farlo?