none
Vistas vistas vistas... RRS feed

  • Pregunta

  • Hola, estoy tropezando con un problema de vistas  de nuevo, lo detallo a continuacion:

    tengo una vista Index donde esta mi <div id="ListaAnuncios"> 

    en este div he incrustado mi vista DetalleAnuncio, en la vista DetalleAnuncio tengo un ActionLink de Ajax para que me muestre el formulario de la vista EditarAnuncio que trato de mostrarlo en el <div id="ListaAnuncios">, pero no lo he logrado, el codigo dentro de la vista DetalleAnuncio, lo he puesto asi:

     <%= Ajax.ActionLink("Editar", "EditarAnuncio", new { id = Model.IDAnuncio }, new AjaxOptions() {UpdateTargetId = "ListaAnuncios" })%>|

    ya tengo los scripts ajax y MVC ajax incrustados, no me muestra ningun error, simplemente no funciona a no ser que le ordene que se muestre en una nueva pestaña del navegador, ahi si me muestra el formulario de edicion con los datos correctos, pero necesito que ese formulario se muestre en mi Index, en el div "ListaAuncios".

    En la vista EditarAnuncio ( la del formulario de edición), utilice tambien el beginform de ajax de esta forma:

     <% using (Ajax.BeginForm(new AjaxOptions(){UpdateTargetId="ListaAnuncios"} )) {%>

     

    Despues de analizar mejor, veo que le problema esta en mi controlador, ya que el POST de EditarAnuncio devuelve un RedirecttoAction, al parecer cuando doy click en el link editar, este me envia directamente a la vista especificada en RedirectToAction, y se salta el formulario de edicion, dejo el codigpo para que se entienda 

     

     // Editar Anuncio
     
     public ActionResult EditarAnuncio(int id)
     {
     Anuncios anuncio;
     anuncio = anunciosRepo.GetAnuncioxID(id);
     return View (anuncio);
     }
     //Metodo UpdateModel
     [AcceptVerbs(HttpVerbs.Post)]
     public ActionResult EditarAnuncio(int id, FormCollection formValues)
     {
     Anuncios anuncio;
     anuncio = anunciosRepo.GetAnuncioxID(id);
     UpdateModel(anuncio);
     anunciosRepo.EnviarCambios();
     return RedirectToAction("DetallesAnuncio", new { id = anuncio.IDAnuncio });
     
     }
    

    Entonces lo que creo que sucede es que al darle click al link "Editar" de la vista DetalleAnuncio, no me muestra le formulario de edicion y directamente se salta a la vista DetalleAnuncio que especifico en el RedirectToAction, quisiera una guia para poder corregir esto.

     

    Espero haberlo explicado bien. Estare atento a las sugerencias.

    Saludos cordiales

    domingo, 6 de marzo de 2011 20:02

Respuestas

  • Buenas!

    Te cuento lo que te pasa, y ya verás que es una tonteria! ;-)

    Ajax.ActionLink usa POST por defecto, por lo que cuando le das a click al enlace de "Editar" te está generando la petición via POST, por lo que te entra directamente al método public ActionResult EditarAnuncio(int id, FormCollection formValues) que termina mostrando la acción "DetallesAnuncio" y es por eso que no ves el formulario.

    La solución pasa por decirle a ActionLink que use "GET" para hacer la petición Ajax:

    <%= Ajax.ActionLink("Editar", "EditarAnuncio", new { id = Model.IDAnuncio}, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "ListaAnuncios" })%>
    

    Fíjate en el uso de la propiedad HttpMethod de AjaxOptions.

    De ese modo se usará GET, con lo cual el control se transferirá al método public ActionResult EditarAnuncio(int id) y con eso el formulario debería aparecerte en el <div>.

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Marcado como respuesta Richof miércoles, 9 de marzo de 2011 12:16
    martes, 8 de marzo de 2011 7:46

Todas las respuestas

  • Buenas!

    Te cuento lo que te pasa, y ya verás que es una tonteria! ;-)

    Ajax.ActionLink usa POST por defecto, por lo que cuando le das a click al enlace de "Editar" te está generando la petición via POST, por lo que te entra directamente al método public ActionResult EditarAnuncio(int id, FormCollection formValues) que termina mostrando la acción "DetallesAnuncio" y es por eso que no ves el formulario.

    La solución pasa por decirle a ActionLink que use "GET" para hacer la petición Ajax:

    <%= Ajax.ActionLink("Editar", "EditarAnuncio", new { id = Model.IDAnuncio}, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "ListaAnuncios" })%>
    

    Fíjate en el uso de la propiedad HttpMethod de AjaxOptions.

    De ese modo se usará GET, con lo cual el control se transferirá al método public ActionResult EditarAnuncio(int id) y con eso el formulario debería aparecerte en el <div>.

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Marcado como respuesta Richof miércoles, 9 de marzo de 2011 12:16
    martes, 8 de marzo de 2011 7:46
  • Gracias por responder Eduard, tienes razon, especificando el GET se  soluciona el problema.

    Saludos

    miércoles, 9 de marzo de 2011 12:07
  • Hola Richof,

    de nada para eso estamos... :D

    Todo arreglado entonces? Lo digo porque he visto otro mensaje tuyo donde decías que al presionar el botón "save" la vista no se mostraba dentro del div... lo has arreglado?

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    miércoles, 9 de marzo de 2011 13:23
  • Hola Richof,

    de nada para eso estamos... :D

    Todo arreglado entonces? Lo digo porque he visto otro mensaje tuyo donde decías que al presionar el botón "save" la vista no se mostraba dentro del div... lo has arreglado?

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    No no, solo fue un error mio, ese tema ya lo había tocado en otro hilo, pero ya esta todo solucionado. Gracias
    miércoles, 9 de marzo de 2011 20:16