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