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


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

Su mejor opción es buscar preguntas más nuevas, o buscar las respuestas a continuación buscando su versión específica de MVC, ya que muchas respuestas aquí están 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 en cuanto a Me doy cuenta, 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 rudimentarios POCO formados por deserializar una llamada wcf). Por lo tanto, 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 manera que puedo ver para averiguar qué objetos ha comprobado 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 el primer lugar, y en segundo lugar, para aquellos elementos que el usuario ha comprobado, el FormCollection lista su valor como "verdadero falso" en lugar de solo verdadero.

Obviamente, me estoy perdiendo 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 utilizando UpdateModel() o a través de un ModelBinder.

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


Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52