我在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()进行调用?
答案 0 :(得分:1)
如果您在一些AJAX返回后重新加载页面,那么使用AJAX就没有意义了。只需做一个正常的GET或POST。
那就是说,你的问题是AJAX是异步的。换句话说,在执行行$('#test').load(...)
之后,在整个AJAX位有机会发送请求并接收响应之前,立即执行下一行。为了仅在返回响应后执行代码,您必须传递回调:
$('#test').load('/Account/TestPartial/' + culture, function () {
// do something
});