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 в контроллере, он отлично работает.

Что мне не хватает?

Ответы

Ответ 1

Кажется, мне не понравилось, как я объявлял свои обратные вызовы OnFailure и OnSuccess. Я думаю, он не смог разобрать мой объект AjaxOptions, поэтому игнорировал параметр HttpMethod="POST".

Я заработал, изменив его на:

OnFailure="function() { alert('fail'); }",
OnSuccess="function() { alert('success'); }" 

Ответ 2

Я изучаю 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 он работал нормально!

Ответ 3

FormCollection имеет связующее по умолчанию связанные с ним, которые всегда инициализирует коллекцию, и вы никогда не должен иметь значение null. Это больше вероятно, что у вас есть пустой сбор при использовании Ajax.ActionLink в отличие от использования формы отправить кнопку. Это связано с тем, что Метод ActionLink не выполняет POST формировать значения, когда он выполняет AJAX запрос. Этот пост является ответом на вопрос

Ответ 4

попробуйте включить

<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>