我编写了一个MVC向导,如果在浏览器中启用了javascript,它会自动使用ajax。向导的每一步都是PartialView(我使用的是ASP.NET MVC 3)。
一切正常。
问题是刷新页面,例如,如果用户的状态因她填写向导的方式而发生变化。 EG,如果向导将用户登录或注册它们。当向导通过AJAX获取部分视图而逐步“移动”时,页面不会刷新以反映用户状态的变化(例如,现在注册了匿名用户)。
基本上,当我需要整页刷新时,我需要在客户端上通过AJAX提供与向导当前步骤对应的部分视图后自动运行以下内容:
location.reload();
由于DOM已经通过AJAX进行了修改,我不知道如何在没有用户干预的情况下运行我的javascript(location.reload();)(例如,点击按钮)。
有什么建议吗?我已经离开工作了一段时间,我正在努力恢复速度。
答案 0 :(得分:1)
目前,我已使用以下文章中的代码解决了我的问题:
使用ASP.NET MVC后,在AJAX调用后重定向
我喜欢本文中讨论的方法,因为它以非常MVC的方式生成可重用的代码 - 我已经有一个基本控制器(AjaxController.cs
),其中我封装了所有我的AJAX感知代码,这是一个很好的除此之外。
但是,这种方法存在两个问题:
我必须从我的向导重定向,所以它只适用于向导的最后一步。如果用户的状态在向导中间发生了变化,我仍然会被嘲笑。
我仍然想知道如何在AJAX调用后刷新我的页面,而不是像这样重定向。
所以,如果有人有答案,我很乐意给他们饼干。
答案 1 :(得分:0)
我不太确定你的ajax调用是如何构造的,但是如果你使用的是MVC Ajax助手,你可以在OnComplete方法中调用location.reload();
,如下所示:
@using (Ajax.BeginForm(new AjaxOptions{OnComplete = "javascriptfunction"}))
{
//Data and submit button
}
<script>
function javascriptfunction(){
location.reload();
}
</script>
答案 2 :(得分:0)
// C# code
public ActionResult Foo(Bar bar)
{
// code here
return Json(new
{
Success = true,
Value = this.RenderPartialViewToString("PartialViewName", bar),
Callback = "window.location.href = 'http://yourdomainurl.com/';"
});
}
// jQuery Ajax
$.ajax({
type: "POST",
url: "/urlWhereToPost",
data: ("form#id").serialize(),
dataType: 'json',
async: false,
beforeSend: function() {
// some instruction
},
error: function(e) {
alert(e.responseText);
},
success: function(data) {
if (data.Success) {
if (data.Callback != null) {
if (data.Callback.length > 0) {
jQuery.globalEval(data.Callback);
}
}
}
else {
// do something
}
}
});