Request.IsAjaxRequest在asp.net mvc2中无法正常工作

时间:2010-11-11 12:14:55

标签: jquery asp.net-mvc ajax

我在我的应用程序中使用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标头。 感谢

2 个答案:

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