Request.IsAjaxRequest никогда не возвращает true в MVC3 - PullRequest
2 голосов
/ 07 марта 2012

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

    @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 и добавил ключ следующим образом согласно Этот вопрос

    <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.Это как-то связано с этим?Спасибо за любую помощь.

Ответы [ 5 ]

7 голосов
/ 07 марта 2012

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

1 голос
/ 26 октября 2012
var controllerContext = MockRepository.GenerateMock<ControllerContext>();
controllerContext.Expect(c => c.HttpContext.Request["X-Requested-With"]).Return("XMLHttpRequest");
controller.ControllerContext = controllerContext;
0 голосов
/ 26 марта 2014

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

0 голосов
/ 29 декабря 2013

Вам нужно добавить ненавязчивый скрипт после jquery-скрипта следующим образом.

bundles.Add(new ScriptBundle("~/bundles/searchDemo").Include(
                "~/Scripts/jquery-{version}.js",
                "~/Scripts/jquery-ui-{version}.js",
                "~/Scripts/jquery.unobtrusive*",
                "~/Scripts/jquery.validate*"));
0 голосов
/ 07 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...