Quiero iterar un DropDownlist
Publicado por Miguel (1 intervención) el 13/03/2024 16:12:22
Necesito una ayuda con un @html dropdownlist. Quiero crear una acción donde pueda modificar todas las entradas que poseen el mismo numero de factura, estas entradas son productos. pero tengo las tablas relacionadas entonces lo que hice en mi accion Editar es esto
public IActionResult Editar(int? id)
{
var entrada = _context.Entradas.Find(id);
var listado = _context.Entradas.Where(e => e.Factura == entrada.Factura).Select(e => new { e.Codigo });
var productos = _context.Productos.Join(_context.Entradas, p => p.Id, e => e.Codigo, (p, e) => new { DataValueField = e.Codigo, DataTextField = p.Codigo });
var entradas = _context.Entradas.Where(p => p.Factura == entrada.Factura).ToList();
ViewData["Codigo"] = new SelectList(_context.Productos, "Id", "Codigo");
return View(entradas);
}
y el View lo hice asi
@model List<Entrada>
@using (Html.BeginForm("Editar", "Entradas", FormMethod.Post))
{
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="row">
@for(int i = 0; i < Model.Count; i++){
<div class="form-group">
@if (i == 0)
{
<label class="control-label"> @Html.DisplayNameFor(m =>m[i].Factura):</label>
@Html.EditorFor(m =>m[i].Factura,new{ htmlAttributes= new{@class="form-control"}})
<span class="text-danger">@Html.ValidationMessageFor(m => m[i].Factura)</span>
}
else
{
@Html.HiddenFor(m =>m[i].Factura)
}
</div>
//Aqui vienen los productos de esa Factura que quiero modificar
<div class="col">
<label class="control-label">@Html.DisplayNameFor(m =>m[i].Codigo):</label>
@Html.DropDownList("Codigo",ViewData["Codigo"] as SelectList, new{@class="form-control"})
<span class="text-danger">@Html.ValidationMessageFor(m => m[i].Codigo)</span>
</div>
}
</div>
}
mi pregunta es la siguiente como puedo mostrar tantos dropdown como items tenga esa factura pero con los id ya seleccionados, porque siempre me sale el primer id?.
public IActionResult Editar(int? id)
{
var entrada = _context.Entradas.Find(id);
var listado = _context.Entradas.Where(e => e.Factura == entrada.Factura).Select(e => new { e.Codigo });
var productos = _context.Productos.Join(_context.Entradas, p => p.Id, e => e.Codigo, (p, e) => new { DataValueField = e.Codigo, DataTextField = p.Codigo });
var entradas = _context.Entradas.Where(p => p.Factura == entrada.Factura).ToList();
ViewData["Codigo"] = new SelectList(_context.Productos, "Id", "Codigo");
return View(entradas);
}
y el View lo hice asi
@model List<Entrada>
@using (Html.BeginForm("Editar", "Entradas", FormMethod.Post))
{
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="row">
@for(int i = 0; i < Model.Count; i++){
<div class="form-group">
@if (i == 0)
{
<label class="control-label"> @Html.DisplayNameFor(m =>m[i].Factura):</label>
@Html.EditorFor(m =>m[i].Factura,new{ htmlAttributes= new{@class="form-control"}})
<span class="text-danger">@Html.ValidationMessageFor(m => m[i].Factura)</span>
}
else
{
@Html.HiddenFor(m =>m[i].Factura)
}
</div>
//Aqui vienen los productos de esa Factura que quiero modificar
<div class="col">
<label class="control-label">@Html.DisplayNameFor(m =>m[i].Codigo):</label>
@Html.DropDownList("Codigo",ViewData["Codigo"] as SelectList, new{@class="form-control"})
<span class="text-danger">@Html.ValidationMessageFor(m => m[i].Codigo)</span>
</div>
}
</div>
}
mi pregunta es la siguiente como puedo mostrar tantos dropdown como items tenga esa factura pero con los id ya seleccionados, porque siempre me sale el primer id?.
Valora esta pregunta
0