ASP.NET MVC3:使用AJAX制作帖子时,如何重定向到视图?

ASP.NET MVC3:使用AJAX制作帖子时,如何重定向到视图?,ajax,json,asp.net-mvc-3,redirect,view,Ajax,Json,Asp.net Mvc 3,Redirect,View,我有一个搜索视图,它使用AJAX向服务器发送请求。根据存储库返回的响应对象,应该在搜索视图(发送请求的视图)上显示一个对话框(使用Json对象填充数据),或者应该将用户重定向到结果视图(使用作为视图模型传递的响应中的数据填充) 现在我被告知(并且有经验)当一篇文章是使用AJAX制作的时候,不能重定向。因此,如果从存储库获得响应,是否有某种方法重定向到另一个视图并传递视图模型,如果应该显示对话框结果,则只回发Json对象 搜索视图发布到的我的控制器操作当前看起来如下: [HttpPost]

我有一个搜索视图,它使用AJAX向服务器发送请求。根据存储库返回的响应对象,应该在搜索视图(发送请求的视图)上显示一个对话框(使用Json对象填充数据),或者应该将用户重定向到结果视图(使用作为视图模型传递的响应中的数据填充)

现在我被告知(并且有经验)当一篇文章是使用AJAX制作的时候,不能重定向。因此,如果从存储库获得响应,是否有某种方法重定向到另一个视图并传递视图模型,如果应该显示对话框结果,则只回发Json对象

搜索视图发布到的我的控制器操作当前看起来如下:

    [HttpPost]
    public ActionResult SomeAction(SearchRequest reqData)
    {
        ResponseBase response = worker.PerformSearch(reqData);

        if (response is ViewResponse)
        {
            //Redirect to "AnotherView" and pass response as the view model.
            return View("AnotherView", response as ViewResponse);
        }
        else if (response is DialogResponse)
        {
            //Return the Json object.
            return Json(new { type = "dialogresponse", data = response });
        }
        else
        {
            //To do: Put error handling code here.
            throw new NotImplementedException();
        }
    }

我建议你把它分成两个电话。在第一个AJAX调用中,检查它是ViewResponse还是DialogResponse。如果ViewResponse进行另一个AJAX调用以获取实际的结果对象,否则进行非AJAX服务器调用以重定向到新视图。

这个问题有点老了,但我想我会提供我的输入。 我有一个类似的情况,我必须发表一篇文章,或者用更新内容填充页面上的一些html,或者将用户重定向到一个新位置。 也许有更好的方法来实现这一点,然而,这就是我所做的。 如果您使用jQuery执行post,那么查看响应的内容类型就足够聪明了;要返回视图,只需按现在的操作,并在success函数中填充内容。如果您希望重定向用户

        string javascript = "window.location.href='{0}';";
        return JavaScript(string.Format(javascript, returnUrl));
mvc框架将把javascript mime类型附加到响应中,jQuery将获取并执行javascript,并重定向用户。 唯一需要注意的是,javascript将填充到success方法中的html内容中。为了克服这种询问html内容类型的问题,请