0

Estoy realizando una aplicacion en net core, la cual se trata de subir multiples imagenes que van asociados a un evento y mostrarlas cuando se le de clic a dicho evento seleccionado.

Lo estoy realizando de la siguiente manera, este es mi modelo:

public class Evento
{
    public int IdEvento { get; set; }
    [Display(Name = "Selecciona la foto de portada")]
    [Required]
    public IFormFile ImagenPortada { get; set; }

    [Display(Name = "Selecciona las imagenes para el evento")]
    [Required]
    public IFormFileCollection GaleriaFotosEvento { get; set; }
    public List<EventoGaleria> Galeria { get; set; }
    public IEnumerable<EventoGaleria> Galeria2 { get; set; }
}

Mi controlador:

[HttpGet]
    public async Task<IActionResult> VerEvento(int idEvento)
    {
        var evento = await repositorioEvento.ObtenerEventoPorId(idEvento);
        var fotosPorIdEvento = await repositorioEvento.ObtenerFotosPorIdEvento(idEvento);

        var modelo = new Evento
        {
            IdEvento = evento.IdEvento,
            Galeria = fotosPorIdEvento
        };

        return View(modelo);
    }

Este es mi repositorio:

public async Task<List<EventoGaleria>>ObtenerFotosPorIdEvento(int eventoId)
    {
        using var connection = new MySqlConnection(connectionString);
        return (List<EventoGaleria>)await connection.QueryAsync<EventoGaleria>("SELECT * FROM `evento_galeria` WHERE EventoId = @EventoId;", new { eventoId }, commandType: CommandType.Text);
    }

Hasta aqui me funciona bien por que estoy obteniendo todas las imagenes que estan relacionadas con el IdEvento, pero en mi vista no muestra las imagenes, asi es como estoy tratando de mostrarlas:

@for (var imagen = 0; imagen > Model.Galeria.Count(); imagen++){
   <img src="@Model.Galeria[imagen].Url" alt="Image" class="img-fluid">
}

Me ayudarian mucho comentandome si estoy haciendo algo mal, ya solo es mostrar la imagen.

1 respuesta 1

0

ya lo pude resolver y lo que hice fue hacerlo con un IEnumerable y en mi vista hacer un foreach del IEnumerable asignandole una variable, les muestro como lo hice:

En mi modelo cambie el public List<EventoGaleria> Galeria { get; set; } por un public IEnumerable<EventoGaleria> Galeria { get; set; }

public class Evento
{
public int IdEvento { get; set; }
[Display(Name = "Selecciona la foto de portada")]
[Required]
public IFormFile ImagenPortada { get; set; }

[Display(Name = "Selecciona las imagenes para el evento")]
[Required]
public IFormFileCollection GaleriaFotosEvento { get; set; }
public List<EventoGaleria> Galeria { get; set; }
public IEnumerable<EventoGaleria> Galeria2 { get; set; }
}

En mi controlado queda de la misma manera:

[HttpGet]
public async Task<IActionResult> VerEvento(int idEvento)
{
    var evento = await repositorioEvento.ObtenerEventoPorId(idEvento);
    var fotosPorIdEvento = await repositorioEvento.ObtenerFotosPorIdEvento(idEvento);

    var modelo = new Evento
    {
        IdEvento = evento.IdEvento,
        Galeria = fotosPorIdEvento
    };

    return View(modelo);
}

En mi repositorio realice lo siguiente:

public async Task<IEnumerable<EventoGaleria>> ObtenerFotosPorIdEvento(int eventoId)
    {
        using var connection = new MySqlConnection(connectionString);
        return await connection.QueryAsync<EventoGaleria>("SELECT * FROM `evento_galeria` WHERE EventoId = @EventoId;", new { eventoId }, commandType: CommandType.Text);
    }

En mi vista asi:

@foreach (var imagen in Model.Galeria2)
  {
    <div class="item">
      <img src="@imagen.Url" class="img-fluid" />
    </div>
   }

Espero les pueda ayudar, si alguien tiene una manera mejor de hacerlo, se lo agradeceria mucho por compartirlo y nos ayudamos todos.

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.