¿Cómo manejar casillas de verificación en formularios ASP.NET MVC?

Precaución: ¡Esta pregunta tiene más de nueve años!

Su mejor opción es buscar nuevas preguntas, o buscar las respuestas a continuación buscando su versión específica de MVC, ya que muchas respuestas aquí son obsoletas ahora.

Si encuentra una respuesta que funcione para su versión, asegúrese de que la respuesta contenga la versión de MVC que está utilizando.
(La pregunta original comienza a continuación)

Esto me parece un poco extraño, pero por lo que puedo decir, así es como lo haces.

Tengo una colección de objetos y quiero que los usuarios seleccionen uno o más de ellos. Esto me dice "formulario con casillas de verificación". Mis objetos no tienen ningún concepto de "seleccionado" (son POCO rudimentarios formados al deserializar una llamada wcf). Entonces, hago lo siguiente:

public class SampleObject{
  public Guid Id {get;set;}
  public string Name {get;set;}
}

En la vista:

<%
    using (Html.BeginForm())
    {
%>
  <%foreach (var o in ViewData.Model) {%>
    <%=Html.CheckBox(o.Id)%>&nbsp;<%= o.Name %>
  <%}%>
  <input type="submit" value="Submit" />
<%}%>

Y, en el controlador, esta es la única forma en que puedo ver para averiguar qué objetos revisó el usuario:

public ActionResult ThisLooksWeird(FormCollection result)
{
  var winnars = from x in result.AllKeys
          where result[x] != "false"
          select x;
  // yadda
}

Es extraño en primer lugar, y en segundo lugar, para aquellos elementos que el usuario verificó, FormCollection enumera su valor como "verdadero falso" en lugar de solo verdadero.

Obviamente, me falta algo. Creo que esto se construye con la idea en mente de que los objetos de la colección sobre los que se actúa dentro del formulario html se actualizan usandoUpdateModel() o a través de un ModelBinder.

Pero mis objetos no están preparados para esto; ¿eso significa que esta es la única manera? ¿Hay otra forma de hacerlo?

Respuestas a la pregunta(22)

Su respuesta a la pregunta