none
Problema con el boton recargar de los navegadores y los metodos HttpPost de los controladores RRS feed

  • Pregunta

  • Buena noche.

    Hace unos momentos descubrí un problemilla interesante mientras probaba unos formularios en una aplicación MVC 3, después de procesarlos y almacenarlos correctamente en la base de datos se me ocurrió darle clic al botón recargar del navegador, y mi sorpresa fue que se llama al controlador HttpPost y vuelve a guardar los mismos datos que se acaban de almacenar (incluso si el formulario esta en blanco).

    Mi pregunta es simple ¿cómo evito este comportamiento?

    Si sirve de algo, uso  [HttpPost] sin opciones, tal vez me haga falta algo.

    De antemano gracias por la ayuda, como siempre.

    jueves, 13 de diciembre de 2012 0:44

Respuestas

  • Hola.

    Lo que sucede, es que supongo que en tu método de acción marcado como HttpPost, retornas de nuevo a la View(). Recomendaría enviaras a una nueva pagina de indicando que se ha guardado correctamente, por ejemplo. Pero si deseas seguir manejando un esquema "single page" puedes indicar que se redireccione al HttpGet de esa misma View:

            [HttpPost]
            public ActionResult Index(Tipo obj)
            {
                .
                .
                .
                return RedirectToAction("Index");
            }
            [HttpGet]
            public ActionResult Index()
            {
                return View();
            }

    Atento a tus comentarios.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG | @nicolocodev
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    • Marcado como respuesta xxNickle domingo, 16 de diciembre de 2012 22:37
    sábado, 15 de diciembre de 2012 6:46

Todas las respuestas

  • Hola.

    Lo que sucede, es que supongo que en tu método de acción marcado como HttpPost, retornas de nuevo a la View(). Recomendaría enviaras a una nueva pagina de indicando que se ha guardado correctamente, por ejemplo. Pero si deseas seguir manejando un esquema "single page" puedes indicar que se redireccione al HttpGet de esa misma View:

            [HttpPost]
            public ActionResult Index(Tipo obj)
            {
                .
                .
                .
                return RedirectToAction("Index");
            }
            [HttpGet]
            public ActionResult Index()
            {
                return View();
            }

    Atento a tus comentarios.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG | @nicolocodev
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    • Marcado como respuesta xxNickle domingo, 16 de diciembre de 2012 22:37
    sábado, 15 de diciembre de 2012 6:46
  • Efectivamente eso ero lo que estaba haciendo, usando la re-dirección ya no se presenta el problema. La solución que me has recomendado es precisamente lo que hacen en varios ejemplos que he visto y ahora entiendo por que lo hacen así. De todas formas me quedo con la solución "single page", seguramente quiera usar ajax para hacer el almacenamiento en algún momento.

    Muchas gracias por la ayuda, una vez más me han despejado el camino.

    domingo, 16 de diciembre de 2012 22:37