2017-02-27 9 views
0

編集:私は今テキストフィールドのために働いている(質問の下のコメントを参照)。ASP.NET/MVC:自動的に "タイプ検証"ですか?

しかし、何らかの理由で、私のドロップダウンリストで検証が行われません。それが正常に動作しますので、コントローラで

@Html.LabelFor(m => m.CountryId, new { @class = "col-md-2 control-label" }) 
<div class="col-md-10"> 
    @Html.DropDownListFor(m => m.CountryId, Model.CountryList, "—Select a country --", 
     new { @class = "form-control" }) 
    <div class="container_voor_error"> 
     @Html.ValidationMessageFor(m => m.CountryId, "", new { @class = "text-danger" }) 
    </div> 
</div> 

コードは、私が思うに、ここで与えなくてもかまいません:私はこれを持って私の見解では

[Display(Name = "Country")] 
[Required(ErrorMessage = "{0} is definitely required!")] 
public int CountryId { get; set; } 

:私はこれを持って私のViewModelに

それはCountryListを各国で塗りつぶし、後でそれを提出した後はサーバー側の検証と処理を行いますが問題はありません。

ので、シナリオはこれです:私は、ドロップダウンリスト(たとえば、ベルギー)で国を選択

  • 次に、「 - 国を選択 - 」と表示されるように、その選択を再度解除します。

  • これで、(遅延)クライアント側の検証が開始され、「国は絶対必要です!」というエラーメッセージが表示されます。

  • しかし、これは起こらず、エラーメッセージは表示されません。

だから私は何かを忘れていますか、何か間違っていますか?

END-OF-EDIT

MVC/ASP.NETの専門家のための簡単な質問に、私は考えます。しかし、私はこの枠組み(学校のコース)で自分の道を見つけているので、これは私が不思議に思っていたことであり、明白な答えは見つけられていません。

私のモデル(またはビューモデル)のアノテーションを使用して、フォーム入力のクライアント側の検証についてです。注釈付き検証要件の1つ以上が満たされない限り、フォームフィールドの値は送信時にサーバーに送信されません。代わりに、同じフォームビューが再度表示されます。今回は、該当するエラーメッセージが表示されます。もちろん、これらのエラーメッセージのHTMLヘルパー(Html.ValidationMessageForなど)がフォームフィールドに含まれていると仮定します。ここまでは順調ですね。

しかし、「あなたのタイプとしての検証」のようなものがあります。ユーザーが入力したときにエラーメッセージが表示され、変更されたことを意味します。ユーザーが送信した後に再読み込みされたフォームにのみ表示されます。そして、これは私の疑問です:「あなたのタイプの検証」は自動的に動作するはずですか?それはインターネットのソース/チュートリアルによって(一般的には明示されていませんが)一般的に暗示されているようです。

しかし、私の経験は異なっています:「検証型として」タイプを使用するには、JavaScript/jQueryイベントハンドラ(keyUp()やonChange()など)を記述する必要があります。明示的

$('some-selector').validate().element('some-element'); 

は、だから私の質問は呼び出します。それは、私はそれぞれに-検証するフォーム要素のための方法の検証()へのこれらの明示的な呼び出しを行うために持っていることを正常ですか?またはASPにあります。NET/MVCは、ビューフォーム上のすべての要素(またはおそらく要素のサブセット)に対して自動的に "タイプ検証"を有効にする方法ですか?

ありがとうございました。

+0

クライアント側の検証を無効にしておらず、関連するスクリプトを含めた場合、これがデフォルトの動作です。また、クライアント側の検証がどのように機能しているか誤解している - 同じフォームビューが再度表示される_は間違っています - 送信ボタンをクリックして検証エラーが発生した場合、フォームは決して送信されません。あなたの '$( 'some-selector')は必要ありません。validate()。要素( 'some-element');'コード –

+0

@Stepen Mueckeありがとうございます。一方では、記述された振る舞い(つまり、「タイプとしての検証なし」)がデフォルトであると述べていますが、jajvaScript/jQuery行は必要ないと述べています。しかし、私はどのようにして "バリデーション・アズ・ユー・ユー・タイプ"を達成するのですか? (実際には、「タイプの検証」は実際のデフォルト動作ですか?) また、私はここでデフォルト設定で作業しています:足場を取った後、関連するものを有効にしたり無効にしたりしていません。関連するスクリプトを追加または削除しました。 – Holland

+0

続き: また、検証エラーが発生した場合、フォームは「決して送信または表示されません」と記載されています...つまり、何もサーバーに送信されていない(つまり、POSTまたはGETアクション場所)、正しい?はい、私は理解しています。クライアント側(jS)に追加されたエラーメッセージと同じページだけです。 – Holland

答えて

0

いいえ、ASP.NET MVCでは、入力時に自動的に "検証"が行われません。あなたが入力時に検証するには、javascriptコードでなければなりません。 ASP.NET MvcはjQuery Validationプラグインをデフォルトで使用しています。このプラグインはぼけイベントのバリデーションを行います。キーアップイベントと同じではありません。

ASP.NET MVCは、要素にいくつかのhtml属性(邪魔されない検証とも呼ばれます)をレンダリングします。検証を有効にしてから無効にしてページソースが表示されている場合は、これを確認できます。次に、これらの属性の値を使用して適切なイベントに接続するjavscriptライブラリがあります。

最後に、このために別のプラグイン/ライブラリを使用することもできます。また、ASP.NETがクライアント側に検証を送信する方法を変更することもできます。

+1

'jquery.validate'は' .keyup'で検証します! ([documentation](https://jqueryvalidation.org/documentation/)を参照してください。特に、_ demo_で遊んでいるときに注意すべき点がいくつかあります。 –

関連する問題