0

クライアント側の検証データ生成にデータ注釈を使用するASP.NETMVC2アプリケーションを作成中です。

フォームでボタンがクリックされるたびにオーバーレイを追加するための次のJQueryがあります

    $(":button").click(function () {
     var overlay = jQuery('<div id="overlay"><img src="/content/images/indicator2.gif" alt="Processing Request Please Wait"/> </div>');
    overlay.appendTo(document.body);
    });

これはほとんどの場合機能しますが、クライアント側の検証が失敗したときにオーバーレイが残ることに何度も気づいています。

クライアント側の検証エラーがない場合にのみオーバーレイを添付したいと思います。クライアント側の検証のステータスを取得するにはどうすればよいですか。

何かのようなもの

if( client_error==null)
{
attach overlay

}

また、これがオーバーレイを取得する正しい方法でない場合は、私に知らせてください。

別の質問が見つかりましたが、回答がありません https://stackoverflow.com/questions/4848539/block-ui-and-client-side-validations

ありがとうございました、

3月

**編集 **

現在、neknoのソリューションが最適です。

同じことを探している他の人に、より深い洞察を与えることができる別のリンクを見つけました

http://www.phpvs.net/2010/04/26/manually-validate-an-asp-net-mvc-form-on-the-client-side-with-microsoftmvcvalidation-js-and-jquery/

4

2 に答える 2

0

状況が許せば、jQuery Block UIプラグインをダウンロードしてください。あなたが望むことをします(そのメッセージを表示するため)。とてもシンプルで、私はいつもそれを使用しています。

于 2011-08-20T20:11:47.473 に答える
0

従来のフォーム ( Html.BeginForm()) または AJAX フォーム ( Ajax.BeginForm()) を使用していますか?

AJAX フォームを使用している場合は、オーバーレイ div をフォームに配置し、フォームにオブジェクトをstyle="display:none;"渡すことでこの状況を処理できますAjaxOptions。MVC AJAX ライブラリは、フォームが検証に合格した場合にのみ、フォームを自動的に表示/非表示にします。提出します。

<% Html.EnableClientValidation(); %>
<% using(Ajax.BeginForm(new AjaxOptions() { LoadingElementId = "overlay" }) { %>
<div id="overlay" style="display:none;">
    <img src="/content/images/indicator2.gif" alt="Processing Request Please Wait"/>
</div>
...
<% } %>

Unobtrusive Ajax in ASP.NET MVC 3に関する Brad Wilson の投稿を確認できます。ここでは、控えめな AJAX の前の MVC 2 の動作についても説明しています。

従来のフォームを使用している場合は、一般的な show-overlay コードをページ上のすべてのフォームに適用するか (以下に示すように)、フォームに ID を指定して、フォームごとに異なるオーバーレイを表示できるようにすることができます。エラーの配列を返すクライアント側の検証メソッドを呼び出します。エラーがない場合、検証は成功し、送信が続行されます。MVC 検証フレームワークはフォーム送信イベントをフックし、自動的に validate() を再度呼び出すため、これには検証コードを 2 回呼び出すという副作用があります。しかし、それが 2 回発生するという事実は認識できず、実際には、値を入力してフォーカスを移動するとすぐにフィールドを検証する動的検証を使用すると、いずれにせよ、検証コードはすでにページで複数回実行されています。すぐに 2 回続けて発生するとは限りません。

このスクリプトをビューの下部、すべてのフォーム タグの下に配置します。

<script type="text/javascript">
    $("form").submit(function (e) {
        var errors = Sys.Mvc.FormContext.getValidationForForm(this).validate('submit');
        if (errors.length == 0) {
            $("#overlay").show();
            // Or use jQuery BlockUI
            $.blockUI({ message: $("#overlay") });
        }
    });
</script>

Scott Guthrie からの詳細情報を参照してください。ここでは、フォームの送信をキャンセルして自分で送信する方法を示しています。彼は、部分ビューから動的データを操作するためにそれを行います。

于 2011-08-20T05:08:44.313 に答える