2012-11-20 18 views
8

私のRazorビュー(ASP.NET MVC 4)には、いくつかのフィールドを表示/非表示するための2つのラジオボタンがあります。最初のラジオボタンを選択すると、これらのフィールドは表示されません。 2番目のラジオボタンが選択されると、フィールドが表示されます。これはradiobuttons onclickイベントにバインドされたJavascript関数によって行われます。特定のフィールドの検証を無効にする

function displayHiddenFields(value) { 
    if (value == 'true') 
    $('#myDiv').removeClass('hidden'); 
else 
    $('#myDiv').addClass('hidden'); 
} 

私は検証を実行するためにビューモデルでデータ注釈を使用しています。私の問題は、見えないフィールドも検証されてしまうことです。これらのフィールドは、表示されているときにのみ検証する必要があります。入力要素のdata-val属性を操作しようとしましたが、これは機能しません。

$('input1').attr('data-val', value); 

問題をどのように解決できますか?クライアント側のJavascriptを使用して見えないフィールドの検証を無効にする方法はありますか?それ以外の場合は、フィールドを条件付きでレンダリングするためにポストバックを行う必要があります。

+0

radiobuttonが1つの場合はこれらのフィールドを削除し、もう1つのフィールドではAJAXを使用してフォームに再度追加する必要があります。 – Mariusz

+1

可能な複製http://stackoverflow.com/questions/6913220/jquery-validator-and-fields-that-have-been-hidden – Suhas

答えて

1

jQueryの検証を使用することをお勧めします。モデルを条件付きで検証することができます。

if($("#field").is(":checked")){ 
//Add some validation here 
}else{ 
//Default validation here 
} 
if($("form").valid()){ 
//Do processing 
} 

問題はバックエンドにあります。データアノテーションを使用している場合は、コントローラのモデルも検証していると仮定します。 'Model.isValid()'などのようなものですか?両方のケース(ラジオボタン1クリックまたはボタン2クリック)が常に「有効な」モデルと一致する限り、正常に動作します。それ以外の場合は、データアノテーションの一部をオフにする必要があります。ちょうど私の経験から。 jQuery Validation Docs

6

私は私のページの一番下にはJavaScriptの以下の部分を追加して、それを解決:

<script type="text/javascript"> 
    $(function() { 
     var settings = $.data($('form').get(0), 'validator').settings; 
     settings.ignore = ".hidden"; 
    }); 
</script> 

この方法は、それに適用される.hiddenクラスを持っているすべての入力には、クライアントでは無視されます側の検証。 「:隠された」無視するフィールドがに設定されている(少なくとも控えめな検証それ以降のバージョンの)デフォルトでは

2
<button id="Submit" type="submit">Submit</button> 
<script type="text/javascript"> 
    $("#Submit").on("click", function() { 
     var validator = $("form").data('validator'); 
     validator.settings.ignore = "input[type=hidden]"; 
    }); 
</script> 
0

だけチェックするよりもずっといいです(jQueryのによって評価)クラス=「隠されました」かtype = "hidden"

関連する問題