none
pasar valores de una vista a una vista parcial RRS feed

  • Pregunta

  • Buenas tardes 

    Tengo una pregunta como puedo pasar valores de una de una vista a una vista parcial,  reproduzco el escenario 

    Tengo una vista que carga tres vistas parciales, entonces cuando guardo los datos de una vista parcial y vuelve a cargar la vista con las parciales, hay un valor que en otra vista parcial debe cargarse..

    No se si me he explicado.

    Muchas gracias 

    Un saludo

    viernes, 17 de julio de 2015 15:02

Respuestas

Todas las respuestas

  • Hola Martin Gonzalez de la Torre,

    Hay dos cosas que no entiendo:

    Primero, la idea de tener vistas parciales es no volver a "re-cargar" toda la vista, sino sólo el contenedor que contiene - valga la redundancia - a la vista parcial, ¿Por qué recargas toda la vista luego de una actualización?

    Ahora, una vista o una vista parcial recibe los datos de un modelo (M)VC y el encargado de proporcionarle el modelo a la vista es un método de acción, si deseas que la vista parcial obtenga un valor, entonces su controlador es el encargado de pasárselo. Puedes utilizar también ViewBag o ViewData.

    Quizá sirva que aclares un pomo más el escenario, porque en lo personal no lo tengo muy claro.

    viernes, 17 de julio de 2015 15:09
  • Hola William 

    Te lo explico mejor  con un ejemplo  ficticio 

     <h2>DATOS </h2>
    <div  >
        @{Html.RenderPartial("_vehiculo", Model.V);}
    </div>
    <div >  
        @{Html.RenderPartial("_propietario", Model.P,  );}
    </div>
    <div  >
        @{Html.RenderPartial("_reparaciones", Model.R);}
    </div>

     La idea es que cuando se introduzcan los datos del Propietario o de Reparaciones en la vista parcial estuviese el Id del vehículo. Previamente se han metido los datos del Vehiculo 

    Las vistas parciales estan asi 

       @model clEntidades.clsPropietario

    @using (Html.BeginForm("GuardarPropietario", "Home", FormMethod.Post, new { id = "formProp", enctype = "multipart/form-data" }))
      {

        @Html.LabelFor(x => x.Nombre, new { @class = "etiqueta" })
        @Html.TextBoxFor(x => x.Nombre, new { @class = "campo" })<br />
        @Html.LabelFor(x => x.Apellido, new { @class = "etiqueta" })
        @Html.TextBoxFor(x => x.Apellido, new { @class = "campo" })<br />
        @Html.LabelFor(x => x.Telefono, new { @class = "etiqueta" })
        @Html.TextBoxFor(x => x.Telefono, new { @class = "campo" })<br />
        <input type="submit" value="Grabar" class="button" /> 
    }

    En el metodo del controlador recibo los parametros del modelo del Propietario y FormCollection de esta manera

     public ActionResult GuardarPropietario(FormCollection f, clsPropietario P)

    {

    }

    Muchas Gracias

    viernes, 17 de julio de 2015 15:31
  • hola

    si la idea es pasar un dato de la view a la partialview podrias usar el

    Html.RenderAction()

    con este puedes asignar un model que usar en la partialiew

    o se aen este caso no invocas a la partial directamente sino que debes hacelor por medio de un ction en el controller para asi poder asignar el modelo

    veras que puedes indicarle un object de parametro para pasarle el valor que viene en el model de la view

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 17 de julio de 2015 15:34
  • Hola Leandro, no te entiendo muy bien , 

    Saludos

    viernes, 17 de julio de 2015 15:40
  • Hola Martin Gonzalez de la Torre,

    Entiendo que lo que requieres es que por cada vehículo que definas registres su propietario y/o reparaciones, pero lo que necesitas es el ID de Vehículo. No se cuál sea tu diseño, pero si tienes una lista de varios vehículos, se entiende que si quieres crear reparaciones y/o propietarios, debes de mencionar la pertenencia con el Vehículo, y al llamar al método de acción de NUEVO de reparaciones y/o propietario, debería llegarle también el ID del vehículo creado. Ese ID es el que mandarás a la vista NUEVO de reparaciones/propietario.

    ¿Si estás usando vistas tipadas, porque el método POST recibe un FormCollection? Basta con el tipo clsPropietario


    viernes, 17 de julio de 2015 15:46
  • Hola Williams, no uso vistas tipadas, exacto, te pongo un ejemplo, meto el vehiculo, el propietario  una reparacion, 

    a la siguiente vez entro y veo los datos del vehiculo del propietario y meto una nueva reparacion .. esa es la idea. el modelo es muy sencillo. 

    CLASES DE ENTIDADES 

    Vehiculo

    Propietario

    OrdenReparacion

    MODELO 

    una clase que cargar a Vehiculo, Propietario, OrdenReparacion 

    viernes, 17 de julio de 2015 16:15
  • hola

    >>no te entiendo muy bien

    que seria lo que no se entiende ? el uso del RenderAction() sabes como usarlo? o al menos has investigado un poco como hacerlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 17 de julio de 2015 17:20
  • >>no uso vistas tipadas

    eso esta muy mal, deberias hacerlo no es aconsejable usar el ViewBag para todo

    >>una clase que cargar a Vehiculo, Propietario, OrdenReparacion

    pero ese es tu modelo de la view

    para apsarlo a un partial

    a este tambien le puedes parar un objeto, o sea

    @Html.Partial("nombrepartial", Model.Vehiculo)

    ese Model es el de la view, la partial tambien debe definir un @model

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 17 de julio de 2015 17:23