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