2010-09-30 27 views
6

Tengo un formulario que contiene un montón de casillas de verificación y algunos otros tipos de control también. Necesito recuperar los nombres de cada casilla de verificación seleccionada.Obteniendo todas las casillas de verificación seleccionadas de un FormCollection

¿Cuál es la mejor manera de hacerlo? ¿Puedo hacerlo con una consulta de linq?

Así que en pseudocódigo, estoy buscando hacer algo como esto:

var names = formCollection 
       .Where(c => c is Checkbox && c.Checked) 
       .Select(c => c.Name); 

actualización Parece el camino MVC somete casillas de verificación es diferente de cómo se comportaría de una forma normal, como un campo oculto es también prestado. Encontré los detalles aquí: How to handle checkboxes in ASP.NET MVC forms?

Anywho, lo tengo trabajando con la ayuda de ese hilo y la respuesta de BuildStarted a continuación. El siguiente código hizo el truco.

var additionalItems = form.AllKeys 
     .Where(k => form[k].Contains("true") && k.StartsWith("addItem")) 
       .Select(k => k.Substring(7)); 
+0

Gracias por esa información. Normalmente solo uso el encuadernador de modelo incorporado y nunca me fijé en los detalles de lo que se imprime en el html con respecto a las casillas de verificación. – Buildstarted

Respuesta

5

Lamentablemente, este tipo de información no está disponible en la colección. Sin embargo, si antepones todas las casillas de verificación con algo como <input type='checkbox' name='checkbox_somevalue' /> continuación, puede ejecutar una consulta como

var names = formCollection.AllKeys.Where(c => c.StartsWith("checkbox")); 

Dado que sólo los valores seleccionados serán enviados de regreso que no es necesario para validar que están marcadas.

Aquí hay uno que llama sólo valores controladas

var names = formCollection.AllKeys.Where(c => c.StartsWith("test") && 
         formCollection.GetValue(c) != null && 
         formCollection.GetValue(c).AttemptedValue == "1"); 
+0

Definitivamente estoy recibiendo TODAS las casillas de verificación publicadas, no solo las marcadas. – fearofawhackplanet

+0

Eso es extraño. Una prueba rápida revela que no es el caso. Puede ser html específico causante de eso. pero el formulario '' no parece funcionar para mí. Sin embargo, he actualizado la respuesta – Buildstarted

+0

Lo tengo resuelto ahora. Actualicé mi pregunta con algunos detalles más. Gracias por tu ayuda :) – fearofawhackplanet

0

Ésta es una de las viejas preguntas no activas durante años, pero me encontré en él. Mi problema es que tengo una serie de casillas de verificación; digamos que el nombre es 'IsValid' y quería obtener el estado de cada una de las casillas de verificación (mi proyecto estaba en MVC 5). En forma de presentar lo hice el bucle de recogida de forma y tengo los valores como ...

if (key.Contains("IsValid")) 
        sV = (string[])collection.GetValue(key.ToString()).RawValue; 

Desde el formulario de publicar el valor del campo oculto también fue publicada con las casillas controladas; la matriz contenía un valor adicional de 'falso' para la casilla de verificación SOLAMENTE marcada. Para deshacerse de los que utilicé después de la función; ¡Espero que ayude a alguien y si mi enfoque es incorrecto, una mejor solución también sería útil para mí!

sV = FixCheckBoxValue(sV); 

     private string[] FixCheckBoxValue(string[] sV) 
    { 
     var iArrayList = new List<string>(sV); 

     for (int i = 0; i < iArrayList.Count; i++) 
     { 
      if (iArrayList[i].ToString() == "true") 
      { 
       iArrayList.RemoveAt(i + 1); 
      }     
     } 
     return iArrayList.ToArray(); 
    } 
Cuestiones relacionadas