1


1

ASP.NET MVC 2クライアント側の検証がHtml.ValidationMessage()で機能しませんか?

ASP.NET MVC 2で動作する非常に簡単なクライアント側検証の例を取得しようとしています。 データ注釈を使用して、必要なプロパティ「姓」を設定しています。 Html.ValidationMessageFor(x ⇒ x.Surname)を使用すると、正しいクライアント側検証スクリプトがページに書き込まれます。 しかし、Html.ValidationMessage( "Surname")を使用すると、クライアント側の検証は、ページが投稿されるまでレンダリングされません。 クライアント側の検証は、フォームの投稿後にのみ機能し始めます! フォームの投稿後、ページ内でスクリプトが更新されていることがわかります。 Html.ValidationMessage()にバグがあるようです?

3 Answer


2


マスターページヘッドで正しいスクリプトを参照していることを確認してください。

" type="text/javascript">
" type="text/javascript">
" type="text/javascript">

また、ビューを見て、クライアント検証呼び出しがフォームの上にあることを確認します

<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
    <%= Html.ValidationSummary(true) %>
    ...
<% } %>

そしてもちろん、問題を示すための検証メッセージ。

<%= Html.ValidationMessageFor(u => u.Name)%>

それが本当にあなたが必要とするすべてです。 必須属性は、フィールドにテキストを入力し、フィールドからテキストとタブを削除した場合にのみチェックを開始すると信じているため、検証を取得するかどうかを確認してください。 その他は、属性が必要なときに検証します。 たとえば、50文字を超えると、 `[StringLength(50)]`はエラーメッセージを表示します。


0


私は試していませんが、メタデータはプロパティに保存されているため、ValidationMessageForのみが(静的リフレクションを介して)プロパティをチェックできます。

もう一方のヘルパーは、文字列キーを使用して、プロパティへの参照なしで(および検証メタデータ情報なしで)モデルステートディクショナリにアクセスします。 。


0


私が知る限り、検証はクライアント側であっても検証を試行する必要があります。

モデルの新しいインスタンスを作成するGETビューで試してから、ビューに送信する前にTryValidateModel()を使用できます。 これにより、検証ロジックが実行され、クライアント側の検証が行われます。これにより、すべての必須フィールドにエラーバージョンが表示されますが、スタイルの選択方法によっては大きな問題になる必要はありません。