2011-10-28 8 views
0

jQueryバリデーターを使用していくつかの条件付き検証をしようとしています。私は、モデル上の[必須]属性を持っているときMVC3条件付きJQuery検証

var validator = $("form").validate(); 
var anyError = false; 

step.find("input").each(function() { 
    if (!validator.element(this)) { 
     // validate every input 
     anyError = true; 
    } 
}); 

if (anyError) { 
    return false; 
} 

すべてが正常に動作します:

は、私は次のステップに移動するときにvalidateメソッドを呼び出すJavaScriptでのウィザードを持っています。

しかし、私はこのシナリオを持っている:

  • 私は選択肢を持つドロップダウンを持っている:電子メールまたはFTP
  • メールオプションが選択されている場合、私は、電子メールアドレスフィールドを示し、検証
  • を追加します
  • Ftpオプションを選択した場合、電子メールアドレスを検証したくないです。

電子メールアドレスのhtmlスニペットは次のとおりです。

<div class="email-address" style="display: none;"> 
    <label class="fullwidth" for="EmailAddress">Email Address</label> 
    @Html.TextBoxFor(m => m.EmailAddress, new { @class = "longtext" }) 
    <div id="email-validation"> 
    </div> 

私はすべての種類を試してみたが、次のボタンの検証ルーチンは、常にフォームが有効であると考えています。例えば。

$("form").validate({ 
    errorLabelContainer: '#email-validation', 
    rules: { 
     EmailAddress: { 
      required: true 
     } 
    }, 
    messages: { 
     EmailAddress: "Please enter an email address" 
    } 
}); 

助けてください。

+0

この記事をチェック: http://blogs.msdn.com/b/simonince/archive/2011/09/29/mvc-validationtookit-alpha-release-conditional-validation-with-mvc-3.aspx 私は同じ問題、フィールドを検証するためのドロップダウン、この記事は本当に便利です。 – Gradile

+0

ありがとうございます - それを試してみます – Matt

答えて

0

私は確かではありませんが、MVC3クライアント側の検証と一緒に標準のjquery検証を使用することはできません。どちらか一方を実行する必要があります。

具体的には、MCV3クライアント側の検証では、jquery検証がそれ自身のために適応されます。これは、jquery-validationスタンドアロンを使用することと矛盾します。

+0

いいえ、間違っています。 ASP.NET mvcには、jvery検証とmvc検証システムをリンクする追加の小さなライブラリが付属しています – archil

+0

@archil - はい、わかっています。私はそれを具体的に言った。問題は、ジェネリックjqueryバリデーションを書くことができないことです。* AND * MVC jqueryアダプターを同じページに使用します。申し訳ありませんが、それは真実ではありません:) –

+0

ライブラリに組み込まれたmvcはjquery-validationプラグインメソッドを呼び出します。彼らは矛盾しません。 jqueryバリデーションプラグインから好きなメソッドを使用することができます。 – archil

0

disabled入力が検証に参加しないという事実を使用します。サーバー側に追加する必要がありますが、ftpが選択されている場合はEmailAddressを無効にして非表示にしてください。

+0

こんにちは、フィールドを無効にしようとしましたが、検証はまだ失敗します。バリデータを呼び出すコードは次のとおりです:var validator = $( "form")。validate(); var anyError = false; $ step.find( "input")。each(function(){if(!validator.element(this)){anyError = true;}}); if(anyError)がfalseを返す。 – Matt

関連する問題