Запрос.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';
}]);
посмотреть этой ссылке