Request.IsAjaxRequest не работает должным образом в asp.net mvc2 - PullRequest
1 голос
/ 11 ноября 2010

я использую asp.net mvc2 для моего приложения.У меня есть запрос AJAX, отправленный с помощью JQuery.

$.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
   }
}

в index actionresult Index.IsAjaxRequest () работает правильно, но когда он перенаправляется в List actionresult, он не идентифицирует его как запрос ajax.Как я могу узнать, что список вызывается из перенаправления ajax? Edit1: Request.IsAjaxRequest возвращает true в IE для обоих методов index и List, тогда как в firefox Request.IsAjaxRequest имеет значение true только для метода index.когда я проверял код для запроса ajax, я мог видеть два из них;первый - это метод post to index, а второй - метод Get from List.IE отправляет заголовок x-required-with с обоими запросами, в то время как firefox отправляет этот заголовок только для первого запроса, предназначенного для метода index.Как я могу заставить Firefox работать так же, как IE (только в этом сценарии), то есть посылать заголовок x-required-with с обоими запросами в случае, когда второй запрос не был получен от клиента, а является перенаправлением от первого запроса.спасибо

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Мухаммед,

вы должны сделать что-то подобное в своем действии индекса:

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, котороеимел строго типизированный класс, соответствующий передаваемым элементам.

0 голосов
/ 12 ноября 2010

Я сделал что-то вроде

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");
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...