从jQuery调用的MVC Controller Action返回后,jQuery重新加载当前页面

时间:2014-06-26 18:31:19

标签: jquery asp.net-mvc asp.net-mvc-4

我在Global.asax中有一些代码需要在执行某些逻辑的Controller Action调用之后执行。我需要在Controller Action返回后重新加载当前页面(无论该页面是什么)。

jQuery调用Controller Action

<script type="text/javascript">
    $(function () {
        $('#SelectedLanguage').on('change', function () {
            var culture = $(this).val();
            $('#test').load("/Account/TestPartial/" + culture);
            //location.reload(true);
            return false;
        });
    });
</script>

控制器操作/帐户/ TestPartial

[AllowAnonymous]
public ActionResult TestPartial(string id)
{
    SetLanguage(id);

    var model = new LanguageListPartialViewModel();

    model.Languages = GetLanguageList();
    model.SelectedLanguage = id;

    return View(model);
}

我试过了location.reload(true);,但它会立即重新加载。我需要等到Controller Action返回。试图在Controller Action中实现await,但我想我不知道如何编写代码,因为TestPartial中的所有被调用例程都不会返回与await兼容的任何内容。

jQuery .get()似乎是一个选项?这些是否意味着我必须将jQuery调用参数转换为JSON并且还要为JSON编写Controller Action,或者是否有办法使用.get()进行调用?

1 个答案:

答案 0 :(得分:1)

如果您在一些AJAX返回后重新加载页面,那么使用AJAX就没有意义了。只需做一个正常的GET或POST。

那就是说,你的问题是AJAX是异步的。换句话说,在执行行$('#test').load(...)之后,在整个AJAX位有机会发送请求并接收响应之前,立即执行下一行。为了仅在返回响应后执行代码,您必须传递回调:

$('#test').load('/Account/TestPartial/' + culture, function () {
    // do something
});