2009-02-05 7 views
5

El mejor ejemplo público que puedo pensar en la cabeza sería el carrito de compras de amazon. Donde tiene una página que muestra múltiples registros distintos que pueden tener múltiples campos distintos actualizados.¿Cuál es la mejor forma de manejar formularios repetitivos en MVC?

No puedo poner cada una en una etiqueta de formulario porque el usuario puede modificar más de un registro y luego enviar.

No puedo actualizar todos los registros que yo vuelva porque:
1. Rendimiento
2. Auditoría
3. Si alguien cambió el registro que el usuario no ha cambiado 'cuando eran ver la página y luego el usuario envía esos cambios se sobrescribirán.

Entonces, ¿cuál es la mejor forma de manejar la obtención de los datos y luego averiguar qué registros se cambiaron de eso?

¿Está claro?

Respuesta

3

Use binding! No itere la colección de formularios en sus acciones.

Steve Sanderson Escribió un blog post acerca de cómo hacerlo. Escribí un blog post sobre cómo hacerlo con MvcContrib. FluentHtml. Ambas publicaciones son muy detalladas e incluyen código descargable.

1

Genere su formulario en un repetidor y añada una ID a los elementos del formulario que se incrementa con cada formulario nuevo. Guarde la cantidad de elementos de formulario repetidos en un campo oculto. Luego, en su controlador, lea el valor de este campo oculto: ese será el número de formularios para leer. Luego, en un bucle, recupere los campos de cada formulario especificando el nombre del campo, más el índice de bucle adjunto al nombre, como la clave.

Puede usar alguna lógica de JavaScript para detectar cuándo cambia el valor de un formulario y actualizar un campo oculto en la sección del formulario si eso ocurre; o puede ocultar los valores originales dentro de un campo oculto con cada sección del formulario (aunque no lo recomiendo porque demasiados campos/formularios hincharán su página).

+0

Creo que me gusta eso. El campo oculto + actualización de JS para saber cuándo se cambia un registro es en lo que no pensé. Creo que incluso podría escribir una carpeta modelo para recuperar una colección como un parámetro de acción. –

+0

Una carpeta modelo sería una buena manera de hacerlo, definitivamente. :) Háganos saber cómo va. –

1

uno (pero no necesariamente el mejor) método consiste en almacenar los elementos que se cambió en un JS-variables o algo en el lado del cliente como se cambian, y sólo entonces envía los datos que es realmente diferente de lo el usuario recibió.

y como dijo Erik, podría usar elementos de formulario ocultos para asegurarse de que funciona sin js también.

+0

Esta es también una buena solución, y si incluye los contenidos de mi respuesta, entonces tiene una solución que reduce el tráfico en el caso común, pero se degrada graciosamente en el caso poco común de un usuario que no tiene JS habilitado . –

Cuestiones relacionadas