0

我正在使用 MVC 3 开发网站,当用户在主页选择列表中选择首选语言时,以下代码将处理该事件。它将读取选择列表的值并将其保存到 cookie。最后,我将提交表单以回发页面。

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

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

        document.cookie = 'culture=' + languageId;

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

现在的问题是当我重新加载页面时浏览器不断警告我。

铬 说:

您正在查找的页面使用了您输入的信息。返回该页面可能会导致您重复执行的任何操作。你要继续吗?

火狐说:

要显示此页面,Firefox 必须发送将重复之前执行的任何操作(例如搜索或订单确认)的信息。

是什么原因?以及如何解决?

编辑

 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);
    }

编辑 2

我已将我的 jquery 代码更改为以下内容:

 $(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 = '/';
            }
        });
    });
});

这是我在控制器中的操作

 [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);
        }
    }
4

2 回答 2

1

当您提交表单时,您会被重定向到一个新页面,该页面POST包含上一页的内容。如果没有编辑的表单内容,该页面将不存在POST。因此,试图返回该页面将需要重新POST加载到该页面的相同数据。

要解决这个问题,您需要克服POST对该页面的 ing,最有可能是使用 Ajax 请求。

于 2012-05-03T14:45:08.753 回答
0

你的控制器功能在做什么?如果您只是返回,如果您想留在该页面上,View您可以返回。RedirectToAction

于 2012-05-03T14:46:49.253 回答