Возвращает ли метод Request.IsMvcAjaxRequest () значение true для запросов, исходящих от щелчка Ajax.ActionLink ()? - PullRequest
2 голосов
/ 14 ноября 2008

У меня есть действие контроллера, которое выполняется по ссылке, созданной с помощью Ajax.ActionLink (), проблема в том, что я не могу сказать в своем действии, что запрос является AJAX-запросом, поскольку Request.IsMvcAjaxRequest() всегда возвращает false.

Не работает ли Request.IsMvcAjaxRequest() с Ajax.ActionLink() сгенерированными запросами?

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

<%= Ajax.ActionLink("Delete", "Delete", new { graphUri = ViewData.Model.Uri.Value }, new AjaxOptions { Confirm = "Really delete?", OnSuccess = "success", OnFailure = "fail", HttpMethod = "DELETE" }, new { title = "Delete Graph", @class = "deleteGraphLink" })%>

Когда я смотрю на код для IsMvcAjaxRequest метода расширения , похоже, что он будет работать только для AJAX Forms, а не для AJAX ActionLinks.

Обновление 11/13

Если я изменю HttpMethod в AjaxOptions на POST, все будет хорошо. Кто-нибудь знает, как заставить Request.IsMvcAjaxRequest () работать правильно, когда вы используете метод DELETE?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2008

Нет параметров формы при удалении. Попробуйте добавить __MVCASYNCPOST = true в качестве данных маршрута (параметр запроса в URL)

0 голосов
/ 14 ноября 2008

Поскольку «IsMvcAjaxRequest» просто возвращает (request ["__ MVCASYNCPOST"] == true) и проверяет строку запроса, форму сообщения и файлы cookie ... он должен работать с POST, GET и т. Д.

Попробуйте поставить точку останова в своем коде и убедиться, что она выполняет POST, затем переключитесь на «DELETE» и посмотрите, будет ли она работать с вашим кодом (потому что это должно работать). Возможно, у вас есть ActionFilter, который позволяет только «POSTS» проходить (или что-то еще, что мешает поведению).

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