我在我的应用程序中使用asp.net mvc2。我有一个使用jquery发送的ajax请求。
$.ajax{(
url:'/home/index'
type:'post',
data:$('#myform').serialize(),
dataType:'html',
success:function(response)
{
//update relevent document portion
}
});
这是我的控制器方法
public ActionResult index(Book book)
{
Repository _repo = new Repository();
_repo.Add(book);
_repo.Save();
if(Request.IsAjaxRequest())
{
return RedirectToAction("List",new{id=book.id});
}
//do something else
}
public ActionResult List(int id)
{
if(Request.IsAjaxRequest())/* here it always returns false even though its been redirected from an ajax request to get here*/
{
//do something
}
}
索引actionresult中的 Request.IsAjaxRequest()正常工作,但当它重定向到List actionresult时,它不会将其识别为ajax请求。我怎么知道从ajax重定向调用列表?
Edit1: Request.IsAjaxRequest在IE中为index和List方法返回true,而在firefox中,Request.IsAjaxRequest仅对索引方法为true。当我检查ajax请求的代码时,我可以看到其中两个;首先是post to index方法,2nd是从List方法获取。 IE向两个请求发送x-requested-with标头,而firefox仅为第一个发往索引方法的请求发送此标头。我如何使Firefox像IE一样工作(仅在这种情况下),即在第二个请求不是来自客户端而是从第一个请求重定向的情况下,向两个请求发送x-requested-with标头。
感谢
答案 0 :(得分:1)
穆罕默德,
你应该在你的索引动作中做这样的事情:
public ActionResult index(Book book)
{
Repository _repo = new Repository();
_repo.Add(book);
_repo.Save();
var items = _repo.GetItems(book.id);
if(Request.IsAjaxRequest())
{
return PartialView("List", items);
}
//do something else
}
应该按照计划工作我认为,只要你有一个名为List的partialview,它有一个强类型类与传入的项匹配。
答案 1 :(得分:0)
我做过像
这样的事情public ActionResult index(Book book)
{
Repository _repo = new Repository();
_repo.Add(book);
_repo.Save();
if(Request.IsAjaxRequest())
{
return List(book.id);
}
//do something else
}
public ActionResult List(int id)
{
if(Request.IsAjaxRequest())/* in this scenario Request.IsAjaxRequest returns true because there is no redirection and no new request*/
{
return View("List");
}
}