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. Этот пост отвечает на ваш вопрос

Другие вопросы по тегам