2016-09-22 7 views
-1

明らかにunobtrusive jsModelStateのエラーは一緒に再生されません。私が達成したいのは2つのことです。 ModelStateまたはクライアント側エラーのいずれかが発生すると、それはvalidation-summary-errorsクラスによって表示されます。ValidationSummaryにクラスを追加する

それは、このように私は次のコードで試してみました ModelStateエラーを表示しません

<div class="validation-summary-errors" data-valmsg-summary="true"> 
    <ul style="list-style-type:none;"></ul> 
</div> 

私が午前問題は、その代わりにヘルパーを使用するのである

コード:

if (!ViewData.ModelState.IsValid) 
{ 
    <div class="validation-summary-errors" data-valmsg-summary="true"> 
     <ul style="list-style-type:none;"></ul> 
    </div> 
} 
else 
{ 
    @Html.ValidationSummary() 
} 

しかし、ヘルパーのために出力をフォーマットすることはできません(リストからも箇条書きを削除するなど)。ここで

のjavascriptさ:

$(document).ready(function() { 
    $('form').each(function() { 
     var theForm = $(this); 
     theForm.submit(function() { 
      if ($(this).valid()) { 
       if ($(this).find('.validation-summary-valid').length) { 
        $('.validation-summary-errors').hide(); 
       } 
      } else { 
       if ($(this).find('.validation-summary-errors').length) { 
        $('.validation-summary-errors') 
         .addClass('alert alert-danger'); 
       } 
      } 
     }); 
    }); 
}); 
+0

あなたが必要とするのは '@ Html.ValidationSummary()'です。あなたのスクリプトを削除してください(MVCサイトに行き、チュートリアルを通して検証の基礎を理解してください - 質問の最初の文が間違っています) –

答えて

0

控えめなモデル状態が一緒にうまくやります。

検証が失敗したときに空のリストを表示し、検証が成功した場合にのみRazorヘルパーを使用するようにビューをハードコーディングしたので、常に空のリストが表示されます。

ブロックifを付けずに@Html.ValidationSummary()を使用してください。モデルが有効であれば自動的に空になります。

予期したときにモデル検証メッセージが表示されない場合は、コントローラーにブレークポイントを設定してif (ModelState.IsValid)に設定し、モデルを検査してください。次に、データ注釈を確認します。デバッグの目的で、モデル状態エラーModelSatate.AddModelError("fieldname", "This field has an error");を手作業で追加して、Razorヘルパーが機能していることを証明することができます。

0

使用する入力に対して、この

@Html.ValidationSummary(true, "", new { @class = "validation-summary-errors" }) 
0

感謝。 ValidationSummary()のif文が削除されました。私がやったことの両方を処理するには、上記のようなもう少し小さなスクリプトをwindow.onloadイベントに追加してください。このようにして、ModelStateのエラーをキャッチします。

関連する問題