Envío de formulario jQuery con advertencia del navegador

Estoy usando MVC 3 para desarrollar un sitio web y cuando el usuario selecciona el idioma preferido en la lista de selección de la página de inicio, el siguiente código manejará el evento. leerá el valor de la lista de selección y lo guardará en las cookies. Finalmente, enviaré el formulario para devolver la página.

$(document).ready(function () {
    $('#lang').change(function () {

        var languageId = $('#lang').val();

        document.cookie = 'culture=' + languageId;

        $('#postback').submit();
    });
});

el problema ahora es que el navegador me sigue advirtiendo cuando recargo la página.

el cromo dice:

La página que está buscando usó la información que ingresó. Volver a esa página puede hacer que se repita cualquier acción que haya realizado. ¿Quieres continuar?

el firefox dice:

Para mostrar esta página, Firefox debe enviar información que repetirá cualquier acción (como una búsqueda o confirmación de pedido) que se haya realizado anteriormente.

¿Cuál es la razón? ¿Y como resolverlo?

EDITAR

 public ViewResult Index()
    {
        int languageId = LocalizationHelper.TryGetCookiesLanguageId();

        LoginPageViewModel model = new LoginPageViewModel
        {
            LanguageId = languageId,
            Languages = Mapper.Map<IEnumerable<SvcLanguageList>, IEnumerable<Language>>(new[]{
             new SvcLanguageList{ LanguageId = 1, LanguageName="English" },
             new SvcLanguageList{ LanguageId = 2, LanguageName="简体中文" },// Simplified Chinese
             new SvcLanguageList{ LanguageId = 3, LanguageName="繁體中文" },// Traditional Chinese
            })
        };

        return View(model);
    }

EDIT 2

He cambiado mi código jquery a lo siguiente:

 $(document).ready(function () {
    $('#lang').change(function () {

        $('img#loading').show(800);
        var culture = $('#lang').val();

        $.ajax({
            url: '@Url.Action("ChangeCulture", "Account")',
            type: 'POST',
            data: JSON.stringify({ culture: culture }),
            datatype: 'json',
            contentType: 'application/json;charset=ascii',
            success: function (data) {
                window.location = '/';
            }
        });
    });
});

y aquí está mi acción en el controlador

 [HttpPost]
    public ActionResult ChangeCulture(string culture, string returnUrl)
    {
        Session["CultureInfo"] = new CultureInfo(culture);
        Response.Cookies["culture"].Value = culture;
        Response.Cookies["culture"].Expires = DateTime.UtcNow.AddYears(1);
        if (Request.IsAjaxRequest())
        {
            return new EmptyResult();
        }
        else
        {
            return Redirect(returnUrl);
        }
    }

preguntado el 03 de mayo de 12 a las 15:05

intenta hacer un $("#postback').reset() antes de $('#postback').submit() (si la cookie es lo único que le interesa) -

2 Respuestas

Cuando envía un formulario, es redirigido a una nueva página, que fue POSTed el contenido de la página anterior. Esa página no existiría sin el contenido del formulario que fue POSTedición Por lo tanto, tratar de volver a esa página necesitaría los mismos datos re-POSTed a eso.

Para resolver esto, tendrías que superar POSTing a esa página, muy probablemente con solicitudes de Ajax.

contestado el 03 de mayo de 12 a las 15:05

Siempre que presione continuar cuando reciba ese mensaje, se volverán a obtener los mismos datos.POSTedición Sin embargo, Ajax es definitivamente más elegante. - Eli

El objetivo de Ajax es que obtenga la respuesta asíncrona y luego actualice la página usted mismo. Utilizando location es su propia elección. - Eli

¿Qué está haciendo su función de controlador? Si solo está devolviendo el View puedes regresar RedirectToAction si quieres permanecer en esa página.

contestado el 03 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.