none
MVC4 y multiples Partial Views RRS feed

  • Pregunta

  • Supongamos que queremos modelar una Persona (View) con multiples partial views para reusar las partial views como telefonos, domicilios, etc.

    Cada partial View tiene su model renderizando su modelo de clases. Cada Clase de las partial view es un objeto de la lista de objetos incluido en la clase Persona del DbContext.

    La duda es cuando envio el submit del action para la View completa de Persona, envia el modelo sin las clases de las partiall view asociadas. Esto se debe a que en cada partial view no conozco el modelo de la View padre.

    Es un caso muy comun, por eso no pego ningun codigo ya que debe ser un tema conceptual, Estoy leyendo un libro y lo que propone es hacerlo con Partial Views, maxime que en el caso de los telefonos uso una grilla y no se como pegarla a la lista de telefonos de la persona.

    Si alguien me aclara esta duda Agradecida!


    • Editado cecilia66 lunes, 10 de junio de 2013 1:22
    viernes, 7 de junio de 2013 15:23

Todas las respuestas

  • La verdad no entiendo como se hace algo tan basico y que a nadie le haya pasado.... DEbe ser un error Muy conceputal el mio. Ojala puedan escalecerlo...
    lunes, 10 de junio de 2013 1:22
  • hola

    no evaluaste usar

    ChildActionExtensions.RenderAction Method

    como veras

    Creating an ASP.NET MVC View by Calling Multiple Actions

    puedes pasarle parametros al action, o sea le pasarias le id de la persona para que el action recupere la parte que el corrsponde y envie de respuesta la Partial View

    RenderPartial vs RenderAction vs Partial vs Action in MVC Razor

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 10 de junio de 2013 4:34
  • ojo si la idea quizas es solo definir vistas reutilizables sin un action porque los datos ya lso tienes, puedes usar el

    html.RenderPartial()

    veras que este permite definir un model de parametro

    por lo cual si en la vista de Personas, ya tiene la entidad con sus otras entidades relacionadas podrias ser mas simple usar este metodo, asi no creas ningun action


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 10 de junio de 2013 4:37
  • Si es correcto, el uso del Render Partial, mi problema es el postback. ya que todo lo que se modifica en la partial view (ya sea una coleccion dentro de la clase Persona) o bien otra clase que no sea inner a la clase de la vista principal (menos), no son enviadas en el postback.

    Ej: Vista principal (Persona)

     @using (Html.BeginForm())
    {

    <div> .... </div> <h3>Parentezco</h3> <div> @Html.Partial("Padres") </div> <h3>Señas Particulares</h3> <div> @{Html.RenderPartial("SeniasParticularesDetail", Model.SeniasParticulares);} </div>

    }


    En este caso le paso la lista de Senias Particulares dentro del modelo Persona

    La vista (a lo mejor este es mi error ya que tiene Strong Type)

    @model IEnumerable<SIACGral.Models.SeniasParticulares>
    
    @{Html.EnableClientValidation();}
    @{Html.EnableUnobtrusiveJavaScript();}
    
    <br />
    
    <div id="SeniasTable" style="width: 60%; margin: auto;">
     @foreach (var se in Model)
     {@Html.EditorFor(model => se.idSeniaParticular);
       @Html.EditorFor(model => se.idUbicacionSeniaParticular);
          @Html.EditorFor(model => se.descripcion);
     }
    </div>

    Recibe la lista, esto hasta aqui funciona bien, TRAE las señas el problema es que no devuelve en la clase Persona la lista de señas modificadas en el EditorFor.

    Se puede tener una partial view (que por supuesto vaya a un action utilizando el HTML Render apropiado) pero que devuelva otra clase por ejemplo, Musica, que no tenga que ver con la clase Persona y el postback, devolveria la clase Persona y Musica?

    Gracias!


    • Editado cecilia66 lunes, 10 de junio de 2013 14:17
    lunes, 10 de junio de 2013 14:11