私は、ユーザーが価格(数値)を入力する入力フィールドのリストを含むフォームを持っています。私はjQueryの検証プラグインがそれに応じてそれを検証するように、彼らのcssクラスを "必須"と "番号"に設定しました。すべてが完璧に機能しています。エラーは、各フィールドが数値でないか値が欠落している場合に表示されます。ASP.Net + jQuery + jQuery検証プラグイン+ UpdatePanel + nyroModal - 各フィールドでの成功の発射!
このフォーム全体は、実際にはnyroModal(jQueryプラグイン)モデルのポップアップウィンドウ内にあります。しかし、それは重要ではありません。その中で、私はUpdatePanelを使って、その中にすべてを入れました。私のフォームは本質的に2段階のプロセスなので、フォームの最初の 'ページ'でユーザーが完了する必要があるいくつかの基本的な手順があります。それが検証されて動作するとき、私は、UpdatePanel内のいくつかの要素を非表示にして、フォームの次の 'ページ'を表示します。これは上記のすべての価格テキストボックス入力フィールドです。
フォームを検証するためのトリガーポイントとしてImageButtonを使用しています。デフォルトではImageButtonのままにしておけば、.NetはUpdatePanel内で起こっているため、私の場合はポストバックのAJAXポストバックを起動します。それは再び望まれています。私は明白な理由のために醜い完全なポストバックを望んでいません。
多くの読書の後、私はjQueryがフォームの検証に成功したかどうかに基づいて.Netがポストバックをしたいときにインターセプトできるように、.NetのPageRequestManagerにjavascriptで接続する方法が必要でした。私のロジックは次のように言います:デフォルトでは、ポストバックを許可しませんが、jQueryがフォームの検証を成功させると、ポストバックが許可されているという変数を設定します。したがって、ユーザーに成功を表示します。
これはすべて正常に動作しますが、最終的な問題が1つあります。
jQuery検証プラグインの検証({success})オプションは、フォーム全体ではなく、個々のフィールドで検証が成功した後、誤って起動しているようです。私。価格入力フィールドのいずれかに数字を入力すると、この成功オプションが発生し、cancelPostback変数がfalseに設定されます。つまり、検証されていないにもかかわらずフォームが送信されることを意味します。有効です。この検証({成功})オプションは、フォーム全体が検証された後にのみ起動すると予想していました。
私はこれを間違って解釈しましたが、実際にはその意味は何ですか? もしそうなら、私は単純に完全フォームが検証されたときだけ、cancelPostback変数をtrueに設定することができますか?
ヒントがあれば、洞察力があります。次のように
私のjQueryのコードの検証を実施し、またネットのポストバックイベントをインターセプトするためには、次のとおりです。
<script type="text/javascript">
// By default, don't allow Postback until we've successfully validated our form on the client-side.
var cancelPostback=true;
// Every single time the page loads, including every single AJAX partial postback
function pageLoad()
{
// Reset the value to say that "We don't allow Postbacks at this stage"..
cancelPostback=true;
// Attach client-side validation to the main form
$("#<%= form1.ClientID %>").validate({ success: function() { alert('validation succeeded!'); cancelPostback = false; } });
// Grab a reference to the Page Request Manager
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(onEachRequest);
alert("Page Load");
}
// Our own custom method to be attached to each new/future page request..
function onEachRequest(sender, args)
{
alert("About to cancel? " + cancelPostback);
// Check to see if we need to Cancel this Postback based on Conditional Logic within this page..
args.set_cancel(cancelPostback);
}
</script>
+1確かによりエレガント! – Icarus
私はjqueryの検証プラグインとupdatepanelを持っていますが、以前はエラーメッセージが数秒で消えてしまうという問題がありました。今は上記のコードで処理され、私が望むように動作します。 – Balaji