フォームを含むモーダルポップアップがあります。ajax (jQuery を使用) 経由で送信されると、フォームが検証され、javascript コールバック関数がモデルが有効かどうかを確認します。そうであれば、モーダル ポップアップはリセットされて非表示になります。
jQuery ajaxSubmit と、POST 動詞のみを受け入れて PartialViewResult を返すアクションを使用して、ASP.NET MVC でこれを行っています。私は自分のサイトのいくつかの場所でこれを行っていますが、1 ページから 2 つのそのようなワークフローに問題があります。同じコードを使用して、一方は機能しますが、もう一方は機能しません。
問題は次のとおりです。
<% using (Html.BeginForm("ApplyPayment", "SomeController", FormMethod.Post, new { @id = "frmApplyPayment" })) { %>
<%= Html.AntiForgeryToken(SomeSaltString) %>
<%= Html.Hidden("ModelValid", ViewData.ModelState.IsValid) %>
...
<% } %>
デバッグ中に、検証エラーが発生したときに ViewData.ModelState.IsValid が false であっても、「#ModelValid」が「True」に設定されます。明示的に false に設定する多くの方法を試しました (ViewData.ModelState.IsValid ? "True" : "False" など)。変数がfalseでポップアップが非表示になっている場合でも、常にtrueになります。何が起こっている?
参照用のコードは次のとおりです。
function SubmitPaymentForm(form) {
$(form).ajaxSubmit({ target: "#modalApplyPayment", success: CheckPaymentValidity });
}
function CheckPaymentValidity(responseText) {
if ($("#ModelValid").val() != "True") {
ShowModalPopup("#modalApplyPayment");
}
else {
HideModalPopup("#modalApplyPayment");
}
}
これはすべて、電子メール機能の同じ基本ページから離れた非常によく似たワークフローで完全に機能します (アドレスを取得し、ajax 投稿で検証し、検証エラーが存在する場合はポップアップを表示するポップアップ)。