ASP.NET MVC3:如何在使用AJAX发布帖子时重定向到视图?

时间:2011-04-11 09:21:40

标签: ajax json asp.net-mvc-3 redirect view

我有一个搜索视图,它使用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();
        }
    }

2 个答案:

答案 0 :(得分:2)

这个问题有点陈旧,但我想我会提供我的意见。 我有一个类似的情况,我必须发布一个帖子,并在页面上填充更新内容的一些HTML,或将用户重定向到一个新的位置。 可能有更好的方法来实现这一点,这就是我所做的。 如果您使用jQuery来执行帖子,那么查看响应的内容类型就足够聪明了;返回视图就像现在一样,在成功函数中填充内容。如果您希望重定向用户

        string javascript = "window.location.href='{0}';";
        return JavaScript(string.Format(javascript, returnUrl));

mvc框架会将javascript mime类型附加到响应中,jQuery会选择它并执行javascript,并重定向用户。 唯一的问题是javascript将填充到您的success方法中的html内容中。为了克服这个问题,请查询html的内容类型,simmilar为here

答案 1 :(得分:0)

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