2010-05-17 8 views
5

Estoy trabajando en un formulario que muestra información sobre pedidos. Cada pedido tiene una identificación única, pero no son necesariamente secuenciales en el formulario. Además, la cantidad de campos puede variar (un campo por fila en el formulario). La entrada en el formulario no se asignará directamente a la base de datos, sino que se agregará al valor actual en la base de datos y luego se guardará. Un ejemplo del formulario se encuentra en la siguiente imagen: la leyenda a la derecha muestra la identificación de cada fila. Form exampleNúmero variable de procesamiento de campos de formulario

Sé cómo generar el formulario de esta manera, pero no puedo entender cómo puedo procesar fácilmente cada una de estas filas de manera confiable. También sé cómo dar a cada uno de los campos un identificador único, como name="order-23" o name="order[23]", pero ¿cómo puedo traducir ese nombre para poder actualizar el registro relacionado en la base de datos?


EDIT: Una solución que se me ocurre sería iterar a través de todos los campos forma en el FormCollection, y si el nombre del campo coincide con el patrón, entonces extraerá el número de ese nombre de campo y procesarlo.
Sin embargo, creo que debe haber una forma mucho más sencilla de hacerlo: este método probablemente implicaría un poco de procesamiento de cadenas en cada campo, y posiblemente se caiga si tengo que agregar campos adicionales para cada fila mas tarde.

+1

+1 para la maqueta, eso es genial :) –

+2

@codeka - He usado las maquetas de Balsamiq - es un GRAN programa –

Respuesta

1

¿No tiene una lista de ID después de la devolución? Creo que no debe depender de qué ID se envían realmente desde el formulario, ya que cualquier persona podría cambiar los ID del formulario por lo que quiera, por lo que se trata de un problema de seguridad. Entonces, después de la devolución, debe tener una lista de ID que desea actualizar (la misma lista con la que creó el formulario). En ese caso, usted sabe exactamente qué cadena de identificación debe usar para recuperar el valor de FormCollection.

En caso de que realmente no pueda obtener la lista de ID que va a actualizar, solo use la iteración de FormCollection como sugirió en su comentario. El procesamiento de cadenas no es tan caro en comparación con todas las demás cosas que se realizan en el proceso de solicitud.

+0

Creo que puedo obtener la lista de ID después de la devolución (recuperándolos directamente de la base de datos). Si este método funciona, tendré que mirar cómo extraer el campo requerido de 'FormCollection' y actualizarlo, no debería ser demasiado difícil. –

+0

Terminé haciendo un poco de ambas cosas: recupero cada orden de la base de datos y luego uso su id de pedido para acceder a su valor en FormCollection. Basé mi solución en parte en el método presentado en http://stackoverflow.com/ preguntas/762825/cómo-puede-formar-recoger-ser-enumerado-en-asp-net-mvc/763952 # 763952 –

0

Si tiene los nombres, simplemente lea los valores usando Request.Form ["order-23"] o vuelva a crear los controles en la página pre-init y tendrá acceso a los valores en su guardar evento directamente a través de los controles creados.

0

He hecho esto cargas en mi CMS.

Esencialmente me tipo de estafa.

La idea es algo como esto ....

reproducir el formulario al cliente, y luego mirar el código fuente gneerated. Debería ver que generó una etiqueta de formulario con un atributo de acción.

Al hacer clic en el botón de envío del formulario será enviado a esa url por lo que en el caso de una presentación orden que publicar la página de nuevo a OrderPage.aspx? OrderId = xxxx

continuación, en el servidor que lo haría construir una instrucción de actualización de su base de datos que contenía algo así como ...

"órdenes Actualizar donde el orden de id =" + Request.QueryString [ "OrderId"]

Entonces, ¿cómo actualizar la acción ...

En la página de llamada le ts dice que tiene un enlace llamado "Nuevo pedido", cuando se hace clic en ese enlace debe hacer 2 cosas ...

  1. redirigir a esta página.
  2. generan una identificación de pedido para esta nueva orden.

ok el primero es simple, simplemente conéctelo a esta página.

el segundo ...

si esta página no es una devolución de datos si (! IsPostback) {/ * obtiene una nueva identificación * /} dependiendo de los ID de su pedido esto puede implicar generar un nuevo guid o hacer algo como obtener el siguiente número en una lista haciendo un select max (id) desde un db.

una vez que tenga esta nueva identificación, debe estar en el evento page_load.

this.form.Action = this.form.Action + "? OrderId =" + yourNewOrderId;

... Tada ...

Enviar página de vuelta al cliente.

ver la fuente.

+0

oh me olvidé de agregar, cuando esta página sea publicada por el usuario presionando el botón de enviar se enviará de vuelta al servidor y Request.QueryString ["OrderId"] contendrá su ID de orden recién generada y los campos de formulario rellenados que, por supuesto, procesa de la manera habitual. – War

+0

No entiendo cómo esto se aplica a mi situación: sé lo que es el ID de pedido y cómo obtenerlo, pero necesito determinar cuál es el valor en cada una de esas filas. Luego tengo que recuperar la parte apropiada (co-respondiendo a esa fila) de la base de datos, y actualizar esa parte con el nuevo valor. Entiendo cómo funcionan los formularios, lo que intento comprender es cómo extraer los valores de las filas cuando no tengo idea de qué filas hay. –

Cuestiones relacionadas