vista varias una pasar net mvc metodo llamar llamando desde datos crear controlador botones boton asp acciones asp.net-mvc

asp.net-mvc - varias - pasar datos de la vista al controlador mvc c#



AsignaciĆ³n de botones individuales en ASP.NET MVC View a las acciones del controlador (3)

Tengo una aplicación donde necesito que el usuario pueda actualizar o eliminar filas de datos de la base de datos. Las filas se muestran al usuario mediante un bucle foreach en el archivo .aspx de mi vista. Cada fila tendrá dos campos de texto (txtName, txtDesc), un botón de actualización y un botón de eliminar. De lo que no estoy seguro es de cómo tengo el botón de actualización para enviar el mensaje al controlador ¿para qué fila actualizar? Puedo ver un par de formas de hacer esto:

  1. Coloque cada fila dentro de su propia etiqueta, luego cuando haga clic en el botón Actualizar, solo presentará los valores de esa fila (también habrá un campo oculto con rowId) y la clase del controlador tomará todos los valores de la publicación como parámetros al método de actualización en el controlador.
  2. De alguna manera, haga que el botón se escriba de una manera para enviar solo los valores de esa fila con una POST al controlador.

¿Hay alguna forma de hacer esto? Una cosa que me preocupa es si cada fila tiene diferentes nombres para sus controles asignados por ASP.NET (txtName1, txtDesc1, txtName2, txtDesc2), entonces ¿cómo se asignarán sus valores a los parámetros correctos del método del controlador?


Puede usar varios formularios y establecer la acción en el formulario para que sea así:

<form method="post" action="/YourController/YourAction/<%=rowId%>">

Entonces tendrá YourController/YourAction/1 , YourController/YourAction/2 y así sucesivamente.

No hay necesidad de dar diferentes nombres a los diferentes cuadros de texto, solo llámalos txtName, txtDesc, etc. (o mejor aún, deshazte de esos prefijos txt). Como están en diferentes formas, no se mezclarán.

Luego, en la acción, haces algo como

public ActionResult YourAction(int id, string username, string description)

Donde nombre de usuario, descripción son los mismos nombres que utilizó en los controles de formulario (por lo que se asignan automáticamente). El parámetro id se asignará automáticamente al número que coloque en la acción del formulario.


Como rodbv dijo que quiere usar elementos separados de <form> .

Cuando usa Asp.Net MVC o html clásico (php, asp clásico, etc.), debe olvidar la forma Asp.Net de manejar las pulsaciones de los botones. Cuando un formulario se publica en el servidor web, todo lo que sabe el servidor es simplemente "el formulario se envió y contenía los siguientes elementos de entrada".

Asp.net (estándar) agrega un envoltorio alrededor de muchas de las acciones estándar de devolución de html usando javascript (la función __doPostback javascript se usa en casi todas partes) y esto agrega información sobre qué elemento de entrada del formulario causó la devolución de datos y lo entrega al servidor en una variable de forma oculta. Podrías imitar este comportamiento si realmente lo deseas, pero recomendaría no hacerlo.

Puede parecer extraño "tirar basura" a una página con muchos <form> , sin embargo, significará que la devolución de datos al servidor será más liviana y debería hacer que todo se ejecute un poco más rápido para el usuario.


También puede tener múltiples botones "con nombre válido" en el formulario como:

<input type="submit" value="Save" name="btnSave" id="btnSave"/> <input type="submit" value="Delete" name="btnDelete" id="btnDelete" /

y luego verifique para ver qué envío recibió. Solo se puede enviar una acción de envío por formulario, por lo que es como si los demás botones de envío no existieran en primer lugar:

if ( HttpContext.Request.Form["btnDelete"] != null ) { //Delete stuff } elseif ( HttpContext.Request.Form["btnSave"] != null ) { //Update stuff }

También creo que puede implementar un ActionMethodSelectorAttribute personalizado como aquí http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form. aspx (también mencionado anteriormente) para tener un código separado más limpio.