MVC Ajax.ActionLink не находит метод POST
У меня есть метод POST, объявленный в моем контроллере:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateComments(int id, string comments)
{
// ...
}
и ActionLink на мой взгляд:
<%= Ajax.ActionLink("update", "UpdateComments",
new { id = Model.Id, comments = "test" },
new AjaxOptions {
HttpMethod="POST",
OnFailure="alert('fail');",
OnSuccess = "alert('success');"
})%>
Я получаю сообщение об ошибке "не найден" при попытке перенаправить этот запрос.
Если я удаляю ограничение POST из метода UpdateComments в контроллере, он работает нормально.
Что мне не хватает?
4 ответа
Кажется, мне не понравилось, как я объявлял OnFailure
а также OnSuccess
Обратные вызовы. Я думаю, это не могло разобрать мой AjaxOptions
объект так игнорировал HttpMethod="POST"
установка.
Я получил его, изменив его на:
OnFailure="function() { alert('fail'); }",
OnSuccess="function() { alert('success'); }"
Я изучаю ASP.MVC в этот момент, и у меня возникла эта проблема с моим Ajax.ActionLink, я получил метод GET, а не метод POST, как это должно было быть. Затем я понимаю, что не добавил ссылку на библиотеку сценариев:
<script src=”/Scripts/MicrosoftAjax.js” type=”text/javascript”></script>
<script src=”/Scripts/MicrosoftMvcAjax.js” type=”text/javascript”></script>
После добавления скрипта все заработало!
Попробуйте в том числе
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
С FormCollection связан механизм связывания по умолчанию, который всегда инициализирует коллекцию, и вы никогда не должны получить значение NULL. При использовании Ajax.ActionLink более вероятно, что у вас есть пустая коллекция, в отличие от кнопки отправки формы. Это связано с тем, что метод ActionLink не передает значения формы POST при выполнении запроса AJAX. Этот пост отвечает на ваш вопрос