Como lidar com caixas de seleção em formulários ASP.NET MVC?

Cuidado: Esta pergunta tem mais de nove anos!

Sua melhor opção é procurar por perguntas mais recentes ou procurar as respostas abaixo procurando sua versão específica do MVC, pois muitas respostas aqui estão obsoletas agora.

Se você encontrar uma resposta que funcione para sua versão, verifique se a resposta contém a versão do MVC que você está usando.
(A pergunta original começa abaixo)

Isso me parece um pouco bizarro, mas até onde eu sei, é assim que você faz.

Eu tenho uma coleção de objetos e quero que os usuários selecionem um ou mais deles. Isso me diz "formulário com caixas de seleção". Meus objetos não têm nenhum conceito de "selecionado" (são POCOs rudimentares formados pela desserialização de uma chamada wcf). Então, eu faço o seguinte:

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

Na visualização:

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

E, no controlador, esta é a única maneira que eu posso ver para descobrir quais objetos o usuário verificou:

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

É esquisito em primeiro lugar e, em segundo lugar, para os itens que o usuário verificou, o FormCollection lista seu valor como "verdadeiro falso" e não apenas verdadeiro.

Obviamente, estou perdendo alguma coisa. Eu acho que isso é construído com a idéia em mente de que os objetos na coleção que são acionados no formulário html são atualizados usandoUpdateModel() ou através de um ModelBinder.

Mas meus objetos não estão configurados para isso; isso significa que este é o único caminho? tem outro jeito de fazer isto?

questionAnswers(22)

yourAnswerToTheQuestion