none
Declaracion de dos model en un razor RRS feed

  • Pregunta

  • Buenas noches. Necesito que me guien, lo que necesito es mostrar en un razor una lista de Empleados y a travez de un formulario hacer un alta.

    Entendi que para mostrar declaro @model IEnumerable<> , pero a la hora de aplicar este model al formulario no me sale :/  Alguien me podria guiar ? Se los agradeceria.


    Facundo Zerpa

    martes, 13 de enero de 2015 2:10

Todas las respuestas

  • Hola,

    La directiva @model permite hacer referencia a un modelo fuertemente tipado. El controlador deberá enviar una lista de empleados.

    public ActionResult Index()
    {
      
      using(ContextDB db = ContextDB())
      {
        var empleados = db.Empleados.ToList()
    
        return View(empleados)
      }  
    }

    En la vista se hae referencia al modelo

    @model IEnumerable<XXXX.Models.Empleado>
    
    @foreach (var item in Model)
    {
      @Html.DisplayFor(modelItem => item.NombreEmpleado)
    }

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.


    Willams Morales P.
    Arequipa - Perú
    martes, 13 de enero de 2015 2:27
  • Y si ahora ese mismo modelo lo necesitaria para hacer un alta por ejemplo? No me deja usar un model IEnumerable.

    Facundo Zerpa

    martes, 13 de enero de 2015 2:29
  • Para hacer un alta no necesitas un objeto del tipo IEnumerable, bastará con:

    @model XXXX.Models.Empleado

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.


    Willams Morales P.
    Arequipa - Perú

    martes, 13 de enero de 2015 2:32
  • Puedo declarar en razor :

    @model IEnumerable<XXX.Models.Empleados>

    @model XXX.Models.Empleados

    Los dos modelos juntos?


    Facundo Zerpa

    martes, 13 de enero de 2015 2:34
  • Me temo que no, recuerda lo que envías del controlador a la vista

    return View(empleados)

    Ahora, puedes enviar la colección pero si quieres referirte a un registro en especial puedes hacer lo siguiente:

    @Model.Where(a => a.idEmpleado == 1).Select(a => a.NombreEmpleado).FirstOrDefault()

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.


    Willams Morales P.
    Arequipa - Perú


    martes, 13 de enero de 2015 2:49
  • Lo que necesito hacer es que en una pagina razor mostrar una lista de empleados traido de la base de datos y en la misma pagina mediante un pop up hacer un alta.

    He leido algo sobre ViewModel pero no logro entender 100%

    Me llego a hacer entender ? :/


    Facundo Zerpa

    martes, 13 de enero de 2015 2:54
  • Entiendo, tu vista recibirá una colección de empleados que es enviada desde el action. Imagínate que esa colección la muestras en una tabla, por cada fila podrás tener un @Html.ActionLink("Editar Empleado", "Edit", routevalues: new { idEmpleado = item.IdEmpleado }). Ese enlace invocará al action Edit donde seguramente retornará un sólo registro.
    martes, 13 de enero de 2015 3:01
  • >>lo que necesito es mostrar en un razor una lista de Empleados y a travez de un formulario hacer un alta.

    algo como esto

    Implementing Basic CRUD Functionality with the Entity Framework in ASP.NET MVC Application

    alli veras que se lista la entidad, se crea una nueva y se puede editar, todas las operaciones

    Getting Started with Entity Framework 6 Code First using MVC 5

    analiza el titulo "Creating a Student Controller and Views" alli arma la tabla de la entidad recorriendo el model que en definitiva es una lista

    y define las opciones para eliminar y editar la entidad en cada row de la tabla que genera

    saludos

    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de enero de 2015 4:07
  • Entonces tienes dos vistas razor, dos modelos y dos acciones:

    Para mostrar la lista:

    • Un modelo IEnumerable<MiEntitdad>
    • Una vista razor ListaEntidades.chtml con el modelo anterior
    • Una accion ListaEntidades que obtiene la lista de entidades de la base de datos y devuelve una view al que se le pasa el modelo

    ListaEntidades.chtml tendrá por cada entidad un enlace <a href=".." >Editar</a> donde el href apunta a la acción que edita la entidad. Esta acción tiene como parámetro el id de la entidad.

    Para mostrar la pantalla de edición:

    • Un model MiEntidad
    • Una vista razor EditarEntidad.chtml
    • Una acción EditarEntidad con el parámetro IdEntidad que lee de la base de datos la entidad y devuelve una vista al que se le pasa el modelo (la entidad a editar)

    Al pulsar el enlace "Editar" podrían pasar dos cosas:

    1. Se va a otra página donde se muestra la pantalla de editar. En este caso no se hace llamada por Ajax y la vista devuelta por la acción editar es una vista completa.
    2. Se muestra un popup para editar la entidad. En este caso, mediante JQuery te susbscribes al evento click de los enlaces editar. Cuando se hace click, haces una llamada ajax al valor del href del enlace. La acción editar devuelve una vista parcial que muestras en un popup mediante el plugin   modal de bootstrap.


    Jesús López


    EntityLite a lightweight, database first, micro orm

    martes, 13 de enero de 2015 8:07