Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

346
Vistas
¿Cómo vincular los valores seleccionados de las listas desplegables en una tabla generada dinámicamente? ASP.NET Core MVC

En mi proyecto ASP.NET Core MVC, hay una tabla con dos columnas que contienen listas desplegables donde se supone que el usuario debe elegir los valores de las tasas y hacer clic en Guardar para actualizarlos para cada fila de la tabla. Hay docenas de filas generadas dinámicamente en total, lo que da como resultado el doble de listas desplegables con valores para rastrear.

Una vez más, el objetivo es actualizar cada fila con los valores seleccionados en las dos listas desplegables de esa fila.

Pude crear la tabla y mostrar los valores. Hay un bucle que genera cada fila de la tabla. El problema que tengo es no saber cómo pasar todos los valores de todas las listas desplegables al controlador junto con los números de fila para poder escribir la lógica para actualizar los valores en la base de datos. Puedo pasar una única combinación desplegable desde la primera fila y no sé cómo hacer lo mismo para todos ellos o indicar de qué fila son. El hecho de que las listas desplegables estén en un bucle hace que esto sea difícil.

Esta es la parte de la vista donde muestro la tabla:

 <tbody> @foreach (var item in Model.WorksheetRates) { var recordNumber = PagedContext.Page * PagedContext.PageSize + Model.WorksheetRates.IndexOf(item) + 1; <tr> <td>@recordNumber</td> <td> @item.Program </td> <td> @item.Area </td> <td> @Html.DropDownListFor(x => x.GARateID, gaRatesList, new { @style = "width:280px;" }) </td> <td> @Html.DropDownListFor(x => x.OverheadRateID, overheadRatesList, new { @style = "width:280px;" }) </td> </tr> } </tbody>

Este es el modelo:

 public class BudgetPrepViewModel { public List<WorksheetRate> WorksheetRates { get; set; } public int GARateID { get; set; } public int OverheadRateID { get; set; } public IEnumerable<SelectListItem> GARateList { get; set; } public IEnumerable<SelectListItem> OverheadRateList { get; set; } }

Como puede ver, agregué el objeto IEnumerable<SelectListItem> porque pensé que tendrían que usarse e iterarse en el controlador. Esto es una conjetura, no sé cómo enlazarlos. Y es importante que los asocie con la fila correcta.

Esto es lo que se me ocurrió en el controlador para el encabezado, el código real dentro no es relevante para la pregunta:

 [HttpPost, ActionName("SelectRates")] public IActionResult SelectRates([Bind("GARateID, OverheadRateID")] BudgetPrepViewModel data) { BPViewModel model = new BPViewModel { MonthNameList = MonthSelectList(), PrepStep = 8 }; return View("Index", model); }

Cualquier ayuda sería apreciada. Por favor, hágamelo saber si algo no está claro, hice todo lo posible para describir esta pregunta. ¡Gracias!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En primer lugar, asumo que WorksheetRate tiene GARateID y OverheadRateID como propiedades, ya que están dentro de la misma fila de la tabla. En segundo lugar, agregué una identificación de propiedad a WorksheetRate para que las opciones seleccionadas puedan identificarse cuando se envía el formulario. Dicho esto, ahora las clases quedan así:

 public class WorksheetRate { public int Id { get; set; } public string Program { get; set; } public string Area { get; set; } public int GARateID { get; set; } public int OverheadRateID { get; set; } } public class BudgetPrepViewModel { public List<WorksheetRate> WorksheetRates { get; set; } public IEnumerable<SelectListItem> GARateList { get; set; } public IEnumerable<SelectListItem> OverheadRateList { get; set; } }

El aspecto clave aquí es que el nombre de las selecciones y entradas debe seguir un patrón para que ASP.NET lo vincule al modelo. En este caso, para vincular valores a la propiedad GARateID de BudgetPrepViewModel.WorksheetRates, el nombre de las selecciones y las entradas debe ser:

  • selecciona:
    • <select name="WorksheetRates[0].GARateID">
    • <select name="WorksheetRates[1].GARateID">
  • entradas
    • <input hidden name="WorksheetRates[0].Id" />
    • <input hidden name="WorksheetRates[1].Id" />

Por lo tanto, la solución es:

 @for (var i=0; i<Model.WorksheetRates.Count(); i++) { <tr> <td> @Model.WorksheetRates[i].Id <input hidden asp-for="WorksheetRates[i].Id" /> </td> <td> @Model.WorksheetRates[i].Program </td> <td> @Model.WorksheetRates[i].Area </td> <td> @Html.DropDownListFor(x => x.WorksheetRates[i].GARateID, Model.GARateList, new { @style = "width:280px;" }) </td> <td> @Html.DropDownListFor(x => x.WorksheetRates[i].OverheadRateID, Model.OverheadRateList, new { @style = "width:280px;" }) </td> </tr> }

He creado unrepositorio con la solución de trabajo completa.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda