2011-01-15 11 views
0

Have: ASP.NET MVC 2、DataAnnotationsModelベースのサーバー検証、およびjQueryによるクライアント検証の使用。私のモデルにあるものは、jQueryベースの検証(jQuery.validateとMicrosoftMvcJQueryValidation.js)を使用してクライアント上で完全に検証されます。クライアントは、MVC 2を使用している間、非モデルのチェックボックスを検証します。jQueryの検証

必要:追加のHTMLを<input type="checkbox" id="terms" />に追加してください。このチェックボックスをオンにして、何かjQueryクライアントスクリプトのMVCが自動的に制御しているかどうかに関係なく、jQueryの検証が必要です。はい、私はそれがサーバー側で検証されません知っているが、私はそれを必要としないか、それをしたいです。

となるはずですが、私はMVCの初心者です.JQueryで初めての初心者で、検索は空白になりました。

助けていただけたら幸いです!

答えて

0

各ビューにViewModelを使用することをお勧めします(そこにすべてのデータ注釈を入れてください)。次に、チェックボックスのブールモデルプロパティを作成し、それを必須に設定することができます。

モデルをコントローラにポストしている場合は、単にAutoMapperを使用してViewModelを必要なモデルにマップするか、単にプロパティをマップするだけです。

どちらの方法でも、すべてのビューにViewModelを使用することをお勧めします。 ViewModelの仕事は、ビューに必要なものすべてを試してみることです。これは間違いなく、モデルで必要とされない他のデータを持つことができることを意味します。

+0

カスタムバリデータークラスを作成してglobal.asax、bla、blaに登録しなければならないので、これを避けたいと思っていました。とにかく保存します。しかし、私はそれの周りに方法を参照してください、これは私がしなければならなかったものです。ありがとう。 –

+0

MVC 3にアップグレードする場合は、カスタムバリデータの代わりにバリデータコントローラをビルドすることができます。次に、[リモート検証](http://msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx)を使用してクライアント側の処理を行うことができます。 –

+0

これは理想的ですが、私は.NET 3.5プラットフォームに固執しています。しかし、私はカスタムバリデーターを必要としないことが判明しました。私はjQueryがテキスト値(trueまたはfalse)を評価し、空の文字列ではないことを確認してDataAnnotation 'Required'の要件を満たしていると思ったので、私は間違っていた。実際に動作し、jQueryによって正しく評価されたことを確認してください([Required(ErrorMessage = "チェックボックスをオンにする必要があります")])。カスタムバリデーターが不要 –

1

ここに解決策があります。これはmvcがjQueryの検証にフックする方法を模倣しています。したがって、モデルに属していないAcceptというチェックボックスがあります。スクリプトはフォームの後に移動し、そのフィールドのすべての検証メタデータを追加します。

<% 
     Html.EnableClientValidation(); %> 
    <% using(Html.BeginForm("Show")) 
{ %> 
     <%= Html.EditorForModel() %> 
     <div class="editor-field"> 
     <%= Html.CheckBox("Accept", new { @class = "required" })%> 
     <span class="field-validation-valid" id="Accept_validationMessage"></span> 
     </div> 
     <input type="submit" value="Submit" /> 
<%} %> 
<script type="text/javascript"> 
    window.mvcClientValidationMetadata[0].Fields.push({ 
     FieldName: "Accept", 
     ReplaceValidationMessageContents: true, 
     ValidationMessageId: "Accept_validationMessage", 
     ValidationRules: [{ ErrorMessage: "The Accept field is required.", ValidationType: "required", ValidationParameters: {}}] 
    }); 
</script> 
+0

を試してみてください。何が起こっているのですか?新しいチェックボックスのクライアント検証メッセージが表示されますが、他のすべてのフィールドの検証メッセージは表示されなくなります。 –

+0

@Justin私はHtml.EditorFor()ステートメントとclass = "required"の余分なチェックボックスを持つテストページを設定しましたが、競合するメッセージは表示されません。おそらくあなたのaspxとJSコードを投稿することができます。 – Vadim

+0

JSコードはありますか? jQuery.validateライブラリは、チェックボックスの 'class =" required "属性を使用して、フォームのsubmittal検証チェックに接続していませんか? –

0

これは近い私を取得しますが、このチェックボックスの検証は、MVCの自動配線さjQueryの検証イベントと競合しているように見えるこの

$(document).ready(function() { 
    //// Assuming your form's ID is 'form0' 
    $("#form0").submit(function() { 
     if ($("#terms").attr('checked')) { 
      return true; 
     } 
     else 
     { 
      //// Error message if any 
      return false; 
     } 
    }); 
}); 
関連する問題