none
mostrar los detalles de un registro en la vista actual RRS feed

  • Pregunta

  • Hola, describo mi consulta: para crear un registro en la BD, tengo una accion crear, y otra crear con el httpVerb.Post, cuando creo el registro luego de darle click en el boton crear, me direcciona a la accion Detalles ( del respectivo registro), lo que nececito es que despues de crear el registro, me muestre la vista Detalles pero en un div especifico, es decir sin salir de mi index, como debo hacerlo? con Ajax?. Espero haberlo explicado bien. Esperare sus sugerencias.

    Gracias

    Saludos cordiales

    miércoles, 23 de febrero de 2011 17:10

Respuestas

  • No sé si lo he entendido bien: Se trata de que tienes incrustado dentro de un DIV de otro formulario el formulario de creación, y quieres que "navegue" ese formulario de creación a otro distinto pero permaneciendo dentro del DIV y sin que cambie el contenedor de ese DIV, ¿es eso?

    Si es así, una de las formas más sencillas que se me ocurre para resolverlo consiste en usar un IFRAME en lugar del DIV, y de esa manera se pueden usar navegaciones normales entre páginas en el interior del IFRAME sin que el formulario contenedor se vea afectado.

    Otra solución sería tratar el formulario Index como si fuera una página maestra, y que tanto el formulario Create como el Details fueran páginas de contenido de esa maestra; de esta manera, se produciría una navegación que recargaría completa la página en el navegador, pero el contenido final sería el deseado (es decir, pasaría de un Index que dentro de un DIV tiene el Create a un Index que dentro del DIV tiene el Details.

    Finalmente, otra alternativa consiste en usar AJAX. Básicamente el mecanismo es parecido al que te indiqué en el primer mensaje. En lugar de usar Ajax.ActionLink, usa Ajax.BeginForm para generar el tag <form> que encierra al formulario de ingreso de datos. En el BeginForm, le indicas un UpdateTargetId con el Id del DIV en el que hay que meter los resultados, y con eso te los "sobreescribe" de manera asíncrona sin recargar la página.

     

    • Marcado como respuesta Richof jueves, 24 de febrero de 2011 12:50
    jueves, 24 de febrero de 2011 7:32

Todas las respuestas

  • Para que al pulsar en un enlace se abra la vista de detalles dentro de un DIV, en lugar de saltar a otro form, puedes usar el "helper" Ajax.ActionLink. Es similar al Html.ActionLink, pero en lugar de cambiar de página, te abre los resultados de la página enlazada dentro del contenedor que le indiques, como por ejemplo un DIV.

    <%= Ajax.ActionLink("Detalles", "Details", new AjaxOptions{UpdateTargetId="elDiv" }) %>
    ...
    <div id="elDiv">...</div>
    

    En el ejemplo anterior, se dibuja un enlace con el texto "Detalles", que al pulsarlo usa Ajax para llamar al método de acción "Details" del controlador actual, y el resultado lo pinta dentro de "elDiv".

    Recuerda que ese método de acción tendrá que devolver una vista parcial, que sólo contenga el html que haya que presentar dentro del div. Y también recuerda que para que funcione el Ajax.ActionLink hay que incluir en la vista (o en la página maestra) las librerías MicrosoftAjax.js y MicrosoftMvcAjax.js

    <script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" type="text/javascript"></script>
    <script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>"
    

     

    miércoles, 23 de febrero de 2011 21:11
  • Gracias  por responder, lo que hago es utilizar el formulario (de ingreso de datos) por defecto que me crea el vstudio, donde al final tengo un boton :

    <input type="submit" value="Create" />

    este formulario lo tengo incrustado en un div en mi index, cuando le doy click me guarda el registro en la Bd y me muestra la vista Details del registro nuevo, pero se sale de la vista index, lo que necesito es que al hacer click o guardar el registro, me muestre la vista Details pero dentro del mismo div donde se mostro previamente el formulario de ingreso de datos, es decir el div del index.

    Saludos 

    miércoles, 23 de febrero de 2011 21:58
  • No sé si lo he entendido bien: Se trata de que tienes incrustado dentro de un DIV de otro formulario el formulario de creación, y quieres que "navegue" ese formulario de creación a otro distinto pero permaneciendo dentro del DIV y sin que cambie el contenedor de ese DIV, ¿es eso?

    Si es así, una de las formas más sencillas que se me ocurre para resolverlo consiste en usar un IFRAME en lugar del DIV, y de esa manera se pueden usar navegaciones normales entre páginas en el interior del IFRAME sin que el formulario contenedor se vea afectado.

    Otra solución sería tratar el formulario Index como si fuera una página maestra, y que tanto el formulario Create como el Details fueran páginas de contenido de esa maestra; de esta manera, se produciría una navegación que recargaría completa la página en el navegador, pero el contenido final sería el deseado (es decir, pasaría de un Index que dentro de un DIV tiene el Create a un Index que dentro del DIV tiene el Details.

    Finalmente, otra alternativa consiste en usar AJAX. Básicamente el mecanismo es parecido al que te indiqué en el primer mensaje. En lugar de usar Ajax.ActionLink, usa Ajax.BeginForm para generar el tag <form> que encierra al formulario de ingreso de datos. En el BeginForm, le indicas un UpdateTargetId con el Id del DIV en el que hay que meter los resultados, y con eso te los "sobreescribe" de manera asíncrona sin recargar la página.

     

    • Marcado como respuesta Richof jueves, 24 de febrero de 2011 12:50
    jueves, 24 de febrero de 2011 7:32
  • No sé si lo he entendido bien: Se trata de que tienes incrustado dentro de un DIV de otro formulario el formulario de creación, y quieres que "navegue" ese formulario de creación a otro distinto pero permaneciendo dentro del DIV y sin que cambie el contenedor de ese DIV, ¿es eso?

    Si es así, una de las formas más sencillas que se me ocurre para resolverlo consiste en usar un IFRAME en lugar del DIV, y de esa manera se pueden usar navegaciones normales entre páginas en el interior del IFRAME sin que el formulario contenedor se vea afectado.

    Otra solución sería tratar el formulario Index como si fuera una página maestra, y que tanto el formulario Create como el Details fueran páginas de contenido de esa maestra; de esta manera, se produciría una navegación que recargaría completa la página en el navegador, pero el contenido final sería el deseado (es decir, pasaría de un Index que dentro de un DIV tiene el Create a un Index que dentro del DIV tiene el Details.

    Finalmente, otra alternativa consiste en usar AJAX. Básicamente el mecanismo es parecido al que te indiqué en el primer mensaje. En lugar de usar Ajax.ActionLink, usa Ajax.BeginForm para generar el tag <form> que encierra al formulario de ingreso de datos. En el BeginForm, le indicas un UpdateTargetId con el Id del DIV en el que hay que meter los resultados, y con eso te los "sobreescribe" de manera asíncrona sin recargar la página.

     

    Excelente, con Ajax es muy facil gracias por la ayuda Alberto, mas adelante volvere por mas...

    Saludos cordiales

    jueves, 24 de febrero de 2011 12:50