Запрос.IsAjaxRequest () всегда возвращает false в MVC4, пробовал все предложения в SO и т. д

позвольте мне начать с объяснения всех возможных решений, которые я пробовал. Теперь у меня есть jquery-unobtrusive-ajax.min.js внутри папки "Мои скрипты" и добавили ее в пакет. Я попытался ссылаться на него на самой странице просмотра вместе с _Layout.cshtml страница кроме того, вот как у меня есть пакет в настоящее время:

//BundleConfig.cs
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
            "~/Scripts/jquery-1.10.2.min.js",
            "~/Scripts/modernizr-2.6.2.js",
            "~/Scripts/jquery.validate.min.js",
            "~/Scripts/jquery.unobtrusive-ajax.min.js"));

этот пакет ссылается на главной странице вида макета, что все мои другие представления являются производными от:

//_Layout.cshtml (at bottom of view, right before hitting </body></html>)
@Scripts.Render("~/bundles/jquery")

наконец в интернете.config, я добавил эти ключи в приложение настройки:

//Web.config
<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

теперь, когда это было заявлено, вот как выглядит мой вызов Ajax. Я пытаюсь вернуть некоторые данные с отдельной страницы и заменить ее тем, что находится на главной странице, довольно просто, я бы подумал:

@Ajax.ActionLink("Edit", "Index", "WeeklyTarget",
    new {id = item.WeeklyTargetId},
    new AjaxOptions {HttpMethod = "GET", UpdateTargetId = "hoursEdit", InsertionMode = InsertionMode.Replace})

когда эта ссылка действия нажата из представления индекса, это вызывается из контроллера:

public ActionResult Index(int? id, IEnumerable<WeeklyTarget> selection )
{            
    if (Request.IsAjaxRequest())
    {
    // return the partial view here
    }
}

но, как указано в моем названии,Request.IsAjaxRequest() всегда будет возвращать false. Что происходит??? Пожалуйста помочь... Я устал. все идеи, ухищрения и обходные пути, которые я мог бы придумать. Я даже попытался очистить свои тайники, чистящие растворы и т. д.

3 ответов


так... проблема была в том, что jquery-unobtrusive-ajax.min.js ссылается на устаревший метод jQuery .live(). Я смог увидеть это как ошибку, возникающую в консоли разработчика chrome во время отладки. Это произойдет только если вы используете последние версии jQuery 1.9 (я использовал 1.10.2). Он был устаревшим в 1.7, но полностью удалены в 1.9.

решение состояло в том, чтобы добавить в другую библиотеку jquery jquery-migrate-1.2.1.js который можно найти здесь: https://github.com/jquery/jquery-migrate#readme и более конкретно (для целей разработки, а не производства) здесь:http://code.jquery.com/jquery-migrate-1.2.1.js. Я сохранил и включил эту библиотеку в свой BundleConfig.cs скрипты и остальные начали работать по назначению. Надеюсь, это поможет другим.


проблемы с ajax-запросами, не синхронизированными идеально с вспомогательными методами miscrosoft, такими как IsAjaxRequest (), возникают, когда вы пропускаете - jquery.ненавязчивый-Аякс.минута.js вы можете установить его : 1. открыть Диспетчер пакетов nuget 2. запустите команду Install-Package Microsoft.на jQuery.Ненавязчивый.Ajax

оригинальную информацию можно найти здесь:https://www.devexpress.com/Support/Center/Question/Details/Q508048

желаю вам много солнца этим летом


Если вы используете AngularJs и $resource, вам может потребоваться добавить это

myAppModule.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}]);

посмотреть этой ссылке