ページをリロードせずに Ajax で送信しようとしているフォームがあります。
Ajax 呼び出しはサーバーにヒットしていますが、関数を呼び出しているようには見えません。$.post
と の両方を試しました$.ajax
。どちらも機能していないようです。数週間前に非常によく似た機能がありましたが、今では複製できません。(最終的な目標は、検証を確認するために、モデルを部分ビューとして返すことです。)
Firefox を使用すると、コントローラー メソッドがすぐにヒットします。Chrome を使用すると、ブラウザのタブがロックされるようです。遅れてコントローラーにヒットすることがあります。(モデル情報は正確に伝わっています。)
ここで何が間違っていますか?
ここに私の部分的な見方があります:
<% using (Ajax.BeginForm("CreateSimpleReport", "Main", new AjaxOptions { HttpMethod="POST" }, new { id="CreateSimpleReport" })){ %>
<%: Html.ValidationSummary(false, "Report creation was unsuccessful. Please correct the errors and try again.", new { @class = "validation_summary" })%>
<% Html.EnableClientValidation(); %>
<div class="col">
<div class="row">
<div class="label">
<%: Html.LabelFor(m => m.Name)%>
</div>
<div class="field">
<%: Html.TextBoxFor(m => m.Name, new { @class = "input texbox" })%>
<%: Html.ValidationMessageFor(m => m.Name, "*")%>
</div>
</div>
<div class="row">
<div class="label">
<%: Html.LabelFor(m => m.Description)%>
</div>
<div class="field">
<%: Html.TextBoxFor(m => m.Description, new { @class = "input texbox" })%>
<%: Html.ValidationMessageFor(m => m.Description, "*")%>
</div>
</div>
<div class="row">
<div class="label">
<%: Html.LabelFor(m => m.Quantity)%>
</div>
<div class="field">
<%: Html.TextBoxFor(m => m.Quantity, new { @class = "input texbox" })%>
<%: Html.ValidationMessageFor(m => m.Quantity, "*")%>
</div>
</div>
<div class="right"><input type="submit" class="button" value="Create Report" /></div>
</div>
<% } %>
コントローラ:
[HttpPost]
public string CreateSimpleReport(SimpleReportModel model)
{
if (ModelState.IsValid)
{
// do something
return "success";
}
else
{
return "failure";
}
}
そして最後に、jQuery:
$('#CreateSimpleReport').on('submit', function (e) {
var $this = $(this);
$.post((this), (this), function(data) {
alert('finish');
});
// $.ajax({
// type: 'POST',
// url: (this),
// data: (this),
// success: function () {
// alert('success');
// },
// error: function (jqXHR, textStatus, errorThrown) {
// alert('error');
// }
// }); // end ajax call
});