Ответ 1
Есть ли у вас jquery ajax script? Я заметил такое поведение, когда не включил его:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
У меня есть моя форма следующим образом
<div id="contact-form" class="hidden" title="Online Request Form">
@Using (Ajax.BeginForm("Contact", "Main",
Nothing,
New AjaxOptions With {.UpdateTargetId = "status", .HttpMethod = "post"},
New With {.id = "contactUs"}))
@<div>
@Html.LabelFor(Function(m) m.Name)<br />
@Html.TextBoxFor(Function(m) m.Name)<br />
@Html.LabelFor(Function(m) m.Phone)<br />
@Html.TextBoxFor(Function(m) m.Phone)<br />
@Html.LabelFor(Function(m) m.Email)<br />
@Html.TextBoxFor(Function(m) m.Email)<br />
@Html.LabelFor(Function(m) m.Question)<br />
@Html.TextAreaFor(Function(m) m.Question)<br />
@Html.LabelFor(function(m) m.Security)<br />
@Html.TextBoxFor(Function(m) m.Security)<br />
<noscript>
<input type="submit" name="submit" value="Ok" />
</noscript>
@Html.ValidationSummary("Oops, please correct the errors.")<span id="status">@TempData("status")</span>
</div>
End Using
</div>
И я открываю его в модальном окне jQuery-UI
<script>
$(function () {
// Open the modal dialog from the div.contact-us click event
$('#contact-us').click(function () {
$('#contact-form').dialog('open');
return false;
});
// Manage the modal dialog behavior.
$('#contact-form').dialog({
modal: true,
autoOpen: false,
buttons: {
Cancel: function () {
$(this).dialog('close');
},
Ok: function () {
$('form#contactUs').trigger('submit');
}
}
});
});
</script>
Когда я нажимаю кнопку "ОК", он отправляется соответствующему контроллеру, однако он не отправляет через AJAX
''# fix the StackOverflow code coloring issue.
<HttpPost()>
Function Contact(ByVal contactForm As Models.ContactForm) As ActionResult
ViewData("Testimonials") = Helpers.GetTestimonials
If ModelState.IsValid Then
''# Submit the email
TempData("status") = "Thank you, we will be in touch"
Else
''# Return False
TempData("status") = "Oops, please correct the errors."
End If
If Request.IsAjaxRequest Then
Return Content(TempData("status").ToString)
Else
Return View("Index")
End If
End Function
Что я делаю неправильно? После того, как я отправлю форму, мой URL-адрес http://example.com/Main/Contact, который говорит мне, что IsAjaxRequest = false
Даже когда я не использую кнопку jquery-ui "ok" и просто добавляю <input type="submit" name="submit" value="Ok" />
к форме, сообщения формы без Ajax
Есть ли у вас jquery ajax script? Я заметил такое поведение, когда не включил его:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
Я не работал с помощниками ASP.NET MVC AJAX за некоторое время, но считаю, что Ajax.BeginForm
добавляет обработчик inline onsubmit
в сгенерированной (HTML) разметке.
Если это так, вызов submit в этой форме программно (ваш jQuery, который запускает событие submit
), не будет вызывать функцию onsubmit
формы, которая, скорее всего, отменяет normal submit и передает форму через AJAX.
Для получения дополнительной информации о том, почему это происходит, ознакомьтесь с этим связанным ответом.
В качестве альтернативы вы можете отправить форму через AJAX, используя
Я нашел один из этих методов менее сложным, чем с помощью помощников Microsoft AJAX.