Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Albpous en 10 Enero 2024, 10:14 am



Título: Problema en ASP.NET Razor Pages Select asp-items
Publicado por: Albpous en 10 Enero 2024, 10:14 am
Estoy creado un proyecto con Razor Pages, para añadir en una tabla un campo foreign key creo una lista para ser seleccionada con datos de la tabla en un <Select> pero no me carga los esos datos

El codigo del controlador en la pagina Create

public IActionResult OnGet()
{
IQueryable<Familia> familias = from m in _context.Familia
select m;
Familias = (IList<Familia>)familias.ToList();
IEnumerable<SelectListItem> itemsfamilias = Familias.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name
});
return Page();
}

si compruebo con puntos de ruptura los valores de itemsfamilias son correctos y se cargan bien pero a la hora de capturar esta información en la vista no aparee nada en el desplegable. El codigo de la vista:

<div class="form-group">
<label asp-for="Receta.FamiliaId" class="control-label"></label>
<select asp-for="Receta.FamiliaId" class="form-control" asp-items="@Model.itemsfamilias"
multiple="multiple" >
<option value="">-- Seleccionar Familia --</option>
</select>
<span asp-validation-for="Receta.FamiliaId" class="text-danger" />
</div>

donde está el error ?
Muchas Gracias


Título: Re: Problema en ASP.NET Razor Pages Select asp-items
Publicado por: TickTack en 17 Febrero 2024, 16:02 pm
El problema quizás esta en cómo estás pasando los elementos de la lista itemsfamilias a la vista. Intenta pasarlo como una propiedad del modelo en lugar de intentar acceder directamente a él en la vista. Aquí tienes una posible solución:

En tu controlador:

Código:
public IActionResult OnGet()
{
    IQueryable<Familia> familias = from m in _context.Familia
                                   select m;
    Familias = familias.ToList();
   
    // Crear la lista de SelectListItem y asignarla como propiedad del modelo
    ItemsFamilias = Familias.Select(a => new SelectListItem
    {
        Value = a.Id.ToString(),
        Text = a.Name
    }).ToList();
   
    return Page();
}

Asegúrate de tener la propiedad ItemsFamilias definida en tu modelo:

Código:
public IList<SelectListItem> ItemsFamilias { get; set; }

Y en tu vista, utiliza asp-items con la propiedad ItemsFamilias del modelo:

Código:
<div class="form-group">
    <label asp-for="Receta.FamiliaId" class="control-label"></label>
    <select asp-for="Receta.FamiliaId" class="form-control" asp-items="Model.ItemsFamilias" multiple="multiple">
        <option value="">-- Seleccionar Familia --</option>
    </select>
    <span asp-validation-for="Receta.FamiliaId" class="text-danger"></span>
</div>

Con estos cambios, quizás podes cargar correctamente los datos en el desplegable en tu vista Razor Page.