Tengo una clase llamada "PropertyFeature" que simplemente contiene PropertyFeatureID y descripción. Es un modelo adecuado creado a través de LINQ to SQL mapeado a una tabla de base de datos de SQL Server. Un ejemplo instancia/fila sería:Mantener el estado de una lista dinámica de casillas de verificación en ASP.NET MVC
PropertyFeatureID: 2
Description: "Swimming Pool"
el número de filas (PropertyFeatures) puede, por supuesto, aumentar y disminuir, y por eso quiero rendir dinámicamente una lista de casillas de verificación de manera que el usuario puede seleccionar cualquiera de ellos. puedo hacer dinámicamente las casillas de verificación con bastante facilidad, con algo como:
<%foreach (var Feature in (ViewData["Features"] as IEnumerable<MySolution.Models.PropertyFeature>)) { %>
<%=Html.CheckBox("Features", new { @id = Feature.PropertyFeatureID, @value = Feature.PropertyFeatureID })%><label for="Feature<%=Feature.PropertyFeatureID%>"><%=Feature.Description%></label>
<%}%>
se especifica la ID de cada casilla y representar la etiqueta del juego de modo que el usuario puede hacer clic intuitivamente la etiqueta y cambiar la casilla de verificación - que funciona muy bien .
puse "nombre" de la casilla de verificación de "características" por lo que todas las casillas de verificación hacen con el mismo nombre, y el modelo MVC Carpeta les piles en una sola colección denominada "Características" cuando el formulario se ha publicado. Esto funciona bien
Una vez que se envía el formulario, utilizo los valores comprobados y los almaceno, por lo que necesito los valores enteros reales para saber qué propiedadFeature se selecciona, no solo una pila de booleanos y nombres de campo. Entonces, idealmente, lo quiero como una matriz o una colección con la que sea fácil trabajar.
Soy capaz de recuperar los valores seleccionados desde mi método de controlador cuando se hace clic en el botón porque he especificado el parámetro como int [] Características.
Pero el problema es que no mantiene el estado. Es decir, cuando hago clic en el botón de enviar y la página se vuelve a cargar (con el formulario nuevamente visualizado) quiero que todas las casillas de verificación dinámicas conserven su estado verificado (o no). Todos los otros campos que he creado con Html.DropDownList
y Html.TextBox
mantienen todos sus estados sin problemas en la misma página en la misma forma.
He pasado horas leyendo todos los otros hilos y artículos sobre temas similares y no hay mucho que hablar sobre el uso de ICollection
y IDictionary
para agrupar las cosas e incluir un valor booleano para cada elemento para que pueda mantener la casilla de verificación estado. Pero no entiendo al 100% cómo usar eso en el contexto de mi propio ejemplo personal. Me gustaría mantener la solución realmente simple y no tener que codificar páginas de nuevas clases solo para mantener el estado de mi casilla de verificación.
¿Cuál es la forma más limpia y adecuada de hacerlo?
El problema es que al volver a representar la vista después de una publicación. La carpeta busca el valor publicado para la entrada denominada "Características". Como esto sería una matriz, me pregunto si eso solo funcionaría para el primer índice. ¿Puedes probar si la primera casilla de verificación puede mantener el estado? Si ese es el caso, es probable que tengas que buscar un enlace de lista un poco más complicado. – dotjoe
Sí correcto. En realidad, creo que no funciona para nada, ni siquiera para la primera casilla de verificación. He jugado un poco más con el enfoque vinculante de la lista y parece mucho más prometedor. Pero todavía es un poco intrincado y no he podido bloquear la mejor solución hasta el momento. – Aaron