ASP.NET MVC 3 - 在ajax调用之后,重定向到新页面或生成页面刷新

时间:2012-09-11 13:07:13

标签: javascript ajax asp.net-mvc

情景:

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

一切正常。

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

我想做什么:

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

location.reload();

问题:

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

有什么建议吗?我已经离开工作了一段时间,我正在努力恢复速度。

3 个答案:

答案 0 :(得分:1)

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

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

我喜欢本文中讨论的方法,因为它以非常MVC的方式生成可重用的代码 - 我已经有一个基本控制器(AjaxController.cs),其中我封装了所有我的AJAX感知代码,这是一个很好的除此之外。

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

  1. 我必须从我的向导重定向,所以它只适用于向导的最后一步。如果用户的状态在向导中间发生了变化,我仍然会被嘲笑。

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

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

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