0

Razorを使用するASP.NETMVC3のアプリケーションがあります。jQueryの検証と目立たない検証とともに、テキストボックスにいくつかのデータ注釈を設定しました。

重要なのは、一部のフィールドには、次のような単純な古いバニラJavaScriptを使用したカスタム検証ロジックがありますfunctions

function Validation() {
    var signUp = SignUpValidation();
    var book = BookingValidation();
    if (signUp && book) {
        return true;
    }
    else 
    {
        ShowErrorMessage();
        return false;
    }
}

function ShowErrorMessage()
{
    $('span#ErrorMessage').html('These fields are required');
}

ここでSignUpValidation()、は、または他の検証ロジックに基づいBookingValidation()て返される関数です。truefalse

これは送信ボタンの私のコードです。

@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post, 
new {@onsubmit = "return Validation()" }))
{
    @Html.Partial("_BookingView")
}

このアプローチは、IE-7/8を除くすべてのブラウザーで機能します。

4

2 に答える 2

1

jQuery.Validate.min.jsファイルとjquery.validate.unobtrusive.min.jsファイルの両方を最新バージョンに更新してみてください...これらのファイルが古い可能性があります...しばらく前に同じ問題が発生しましたこの更新を行うことで修正しました。

于 2012-06-28T15:50:20.040 に答える
1

私は最近同じ問題に直面し、次の解決策を考え出しました:フォームの「onsubmit」イベントで別の/ 2番目の送信ハンドラーとして追加のフォーム検証(目立たないmvc 3検証は別として)を与える代わりに、「注入」する必要がありますmvc3の主な目立たない検証プロセスでの追加の検証機能..残りの処理を任せます。

一般的なJavaScriptコード/ファイルのどこかにカスタム検証アダプターを作成します。

(function ($) {
  if($.validator && $.validator.unobtrusive) { 
    $.validator.unobtrusive.adapters.addBool("AdditionalFormValidation");
  }
} (jQuery));

フォームがあるビューファイルで、次のコードを追加して、上記の共通ファイルで定義したカスタムバリデーターアダプター用の新しいjqueryバリデーターメソッドを作成します。

(function ($) {
        if ($.validator) {
            $.validator.addMethod("AdditionalFormValidation", function (value, element) {
                return Validation();
            });
        }
    } (jQuery));

ここで-「AdditionalFormValidation」は、カスタム検証アダプターと同じバリデーターメソッド名です。-「検証」は、追加の検証を処理し、検証の成功または失敗のブール結果を返すjavascript関数の名前です。

フォームで、指定した「onsubmit」ハンドラーを削除し、非表示のダミーテキストフィールドをフォームに追加して、以下に示すように、作成したカスタムの目立たない検証アダプター/ルールを適用します。

@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post)) 
{ 
@Html.Partial(MVC.Booking.Views._BookForAtWork) 
<input type="text" style="visibility:hidden; width: 1px; height: 1px;" name="hiddenValidation" id="hiddenValidation" data-val="true" data-val-AdditionalFormValidation />
} 

このソリューションは私にとって魅力のように機能しました。2番目の検証フローを作成するのではなく、mvc3の同じ目立たない検証フローに追加の検証を注入するため、私にはよりクリーンなソリューションのように見えます。また、すべてのカスタムクライアント側検証作業のカスタムデータ注釈(検証)を作成するための将来の改善にインラインです。

于 2012-06-28T19:29:05.413 に答える