2009-04-07 1 views
6

ASP.NET MVCモデルエラーに焦点を当てる:設定は、私はいくつかの妥当性チェックを行い、にModelStateにエラーを追加したモデルを持っている

ViewData.ModelState.AddModelError("mycontrol", "message") 

彼らは、ビュー側の細かい表示するが、そこにあります検証メッセージに対応するコントロールにフォーカスを設定する方法は?今、ページが更新されてページの上部にとどまるので、エラーがページの最後に向いている場合、ユーザーには何が起こったのかは分かりません。

注:別の解決策は、ValidationSummaryがページの上部にエラーのリストを表示することですが、何も表示することができませんでした。すべてのエラーはValidationMessageを介して表示されます。

編集: ValidationSummaryで問題が見つかりました。私が持っていたマークアップされました:

<%=Html.ValidationSummary()%> 

私はまだしかしエラーでフィールドにスナップする方法を知りたい:されている必要があります

<% Html.ValidationSummary()%> 

+0

ValidationSummaryが機能するはずです。それは私のためです。マークアップのいくつかを見せてもらえますか? HtmlHelper拡張モジュールは、同じモデル状態を参照してエラーを表示します。 – tvanfosson

+0

マークアップで「=」が見つからなかったときにサンプルコードを投稿して途中で出てきました。 – gfrizzle

答えて

24

最初の入力までスクロールしてエラーが発生するjqueryの良さがあります。トリッキーなことは、jQueryオブジェクトのfocus()メソッドがfocus要素をフォーカスするのではなく、focusイベントを発生させたときにfocus()を呼び出す前に、基礎となるDOM要素を取得する必要があることです。

<script type='text/javascript'> 
    $(document).ready(function() 
    { 
     var input = $('.input-validation-error:first'); 

     if(input) 
     { 
      input.focus(); 
     } 
    }); 
</script> 
+0

良い解決策。私はそれを動作させるために "return false"を追加しなければなりませんでした。 if(入力) { input.focus(); falseを返します。 } –

+0

@HallgeirEngen本当に必要なはずはありません。実行されるのは、レディハンドラの実行を中止することだけです。それ以降のコードがあれば、それは実行されません。 – tvanfosson

1

JavaScriptを使用して、MVC検証HTMLクラス(入力検証エラー)が追加された入力要素を見つけ出し、最初のキャラットに移動することができます。私はそれをテストしていませんが、/その要素に画面を移動する必要があります。

jQueryなどのJSライブラリは、これを簡単に行うことができます。

関連する問題