1

设想:

我编写了一个 MVC 向导,如果在浏览器中启用了 javascript,它会自动使用 ajax。向导的每一步都是一个 PartialView(我使用的是 ASP.NET MVC 3)。

一切正常。

问题是刷新页面,例如,如果用户的状态由于她填写向导的方式而改变。例如,如果向导将用户登录或注册。当向导通过 AJAX 获取部分视图一步一步地“移动”时,页面不会刷新以反映用户状态的变化(例如,现在注册了一个匿名用户)。

我想做的事:

本质上,当我需要刷新整个页面时,我需要在通过 AJAX 提供与向导当前步骤相对应的部分视图之后在客户端上自动运行以下命令:

location.reload();

问题:

由于 DOM 已通过 AJAX 修改,我不知道如何让我的 javascript (location.reload();) 在没有用户干预的情况下运行(例如,单击按钮)。

有什么建议么?我已经下班了一段时间,正在努力恢复速度。

4

3 回答 3

1

目前,我已经使用以下文章中的代码解决了我的问题:

使用 ASP.NET MVC 时在 AJAX 调用后重定向

AjaxController.cs我喜欢本文中讨论的方法,因为它以一种非常 MVC 的方式生成了可重用的代码 - 我已经有一个基本控制器 (

但是,这种方法存在两个问题:

  1. 我必须从我的向导重定向,所以它只适用于向导的最后一步。如果用户的状态在向导中途发生变化,我仍然很紧张。

  2. 我仍然想知道如何在 AJAX 调用后刷新我的页面,而不是像这样重定向。

所以如果有人有答案,我很乐意给他们饼干。

于 2012-09-11T13:45:35.730 回答
0

我不太确定您的 ajax 调用的结构,但如果您使用的是 MVC Ajax 助手,您可以调用location.reload();OnComplete 方法,如下所示:

@using (Ajax.BeginForm(new AjaxOptions{OnComplete = "javascriptfunction"}))
{
    //Data and submit button
}
<script>
    function javascriptfunction(){
        location.reload();
    }
</script>
于 2012-09-11T13:40:08.747 回答
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
        }
    }
 });        
于 2012-09-11T13:48:14.870 回答