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>