2012-03-07 4 views
2

Я использую Asp.net MVC3 и пытаюсь сделать простой пост Ajax на сервер, который возвращает частичное представление и обновляет список элементов во время поиска.Request.IsAjaxRequest никогда не возвращает true в MVC3

@using (Ajax.BeginForm("PartialUpdate", "Listing" 
     , new AjaxOptions { 
       UpdateTargetId = "ListPartialDiv", 
       HttpMethod = "GET", 
       InsertionMode = InsertionMode.Replace, 

     })) 
    { 
     <!-- Search Boxes and buttons here --> 
    } 

    <div id = "ListPartialDiv"> 
     @{ 
      Html.RenderPartial("_ListPartial", Model); 
     } 
    </div> 

Ajax успешно выполняет вызов на сервер, и сервер отвечает, отправив частичный вид. Но частичный вид всегда отображается на новой странице. Я узнал, что это происходит потому, что он не знает, что это вызов ajax, и поэтому он отображает новую страницу. Я включил правильные JQuery-ubobtrusive-ajax.min.js скрипты и добавил ключ следующим образом в соответствии с This Question

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"> 

Мой код контроллера очень прост:

 if (Request.IsAjaxRequest()) 
      return PartialView("_ListPartial", list); 

     return View("Index", list); 

Но Request.IsAjaxRequest() всегда возвращает false независимо от того, что. Я также использовал fiddler и firebug в соответствии с This Question и не вижу заголовок X-Requested-With, но я не могу понять, что это значит или как его изменить. Единственное, о чем я могу думать, это то, что каждый другой пример, который я вижу, использует более старую версию jquery. Это связано с этим? Спасибо за любую помощь.

+0

Вы заметили, что браузер фактически не выполняет AJAX POST? – SLaks

ответ

7

Вы включили сценарий ненавязчивого AJAX перед jQuery, поэтому ни один из ваших скриптов не работает.

+0

Yep вот-вот набрал тот же ответ – Blindy

+0

Пригвожденный! Благодаря! – Dan

0

Убедитесь, что файл сценария jquery.unobtrusive.ajax.js/jquery.unobtrusive.ajax.min.js ссылается после других файлов сценария jquery, также убедитесь, что вы не ссылаетесь на файл более одного раза на страницу и вы должны быть отсортированы

1
var controllerContext = MockRepository.GenerateMock<ControllerContext>(); 
controllerContext.Expect(c => c.HttpContext.Request["X-Requested-With"]).Return("XMLHttpRequest"); 
controller.ControllerContext = controllerContext; 
0

Вам необходимо добавить ненавязчивый скрипт после сценария jquery.

bundles.Add(new ScriptBundle("~/bundles/searchDemo").Include(
       "~/Scripts/jquery-{version}.js", 
       "~/Scripts/jquery-ui-{version}.js", 
       "~/Scripts/jquery.unobtrusive*", 
       "~/Scripts/jquery.validate*")); 
0

Я наткнулся на аналогичную ситуацию, когда IsAjaxRequest() не работал. Я убедился, что Microsoft ненавязчивый пакет включен. Это все еще не помогло. Просто обновлена ​​до последней версии ненавязчивой библиотеки от менеджера пакетов, и это сработало!

Смежные вопросы