2016-07-13 7 views
0

私は検証のためにデータ注釈を使用しています。また、クライアント側の検証にunobtrusive.jsを使用しています。 デフォルト設定のjquery.validate.js(ignore: ":hidden")のように、デフォルトでは検証されていないいくつかの非表示フィールドがあります(私は必要ありません)。 は、私の場合、私はちょうど、特定の隠しフィールドを検証すると、すべてではない、結果として私は をオーバーライドすることはできません無視:へ:「隠された」は無視:[]を。 これが変更された場合、私の必要条件ではないすべての隠しフィールドが検証の対象となります。Asp.net-MVCの特定の非表示フィールドに対するクライアント側の検証

特定の非表示フィールドの検証を有効にする方法がわかりません。

[ValidDate(ErrorMessage = "This is not a valid date.Please enter date in dd/mm/yyyy format.")] 
public string HiddenSelectedDob { get; set; } 

ValidDateは、カスタム属性です。

は、ここで私は、3つの異なるドロップダウンからとjQueryを使用して設定されます HiddenSelectedDobの値ダウン各ドロップの変更イベントのために日、月、年のために、ユーザからの入力を取っています。 最後に、この隠しファイルを提出して検証する必要があります。

私はその隠された..

@Html.HiddenFor(m => m.HiddenSelectedDob, new { @class = "validateAlways" }) 

のように提出し

$.validator.setDefaults({ ignore: ":hidden:not(.validateAlways)" }); 

ようjqury.validate.jsのデフォルト設定を上書きが、結果は同じであるにクラス名を与えています。提出されたファイルは検証されていません。

+0

パーツを構成するフィールドを正しく検証した場合、非表示のdobは常に有効ではありませんか? –

+0

実際には、31/02/2016は有効な日付ではありませんが、31,02、および2016などの個々のフィールドは有効です。 – Anadi

+0

ドロップダウンをロードする方法を強化する必要があります。ドロップダウンリストで無効なエントリを許可しないでください。これがドロップダウンのポイントです。 –

答えて

5

私が見る唯一の方法は、検証したい隠し入力にクラスを追加することです。

ビューレベルでこれを行う必要があります。彼らはvalidateAlwaysクラスがある場合を除いて、すべての隠された入力を無視します:

@Html.HiddenFor(x => x.HiddenSelectedDob, new{@class="validateAlways"}) 

その後、意味どの

ignore: ':hidden:not('.validateAlways')' 

にvalidate.jsの無視規則を変更。

+0

ありがとう!!それは動作していません。 $ .validator.setDefaults({ignore: ":hidden:not(.validateAlways)"}); 'のようにオーバーライドします。 – Anadi

+1

クラス名は '$ .validator.setDefaults({ignore: ':hidden:not('。validateAlways ')'});'(引用符で囲む必要があります。また、あなたは 'id' - 'を使うこともできます:hidden:not('#HiddenSelectedDob ')' –

+0

ありがとう@StephenMueckeそれは現在うまく動作しています.. – Anadi

関連する問題