2011-12-14 4 views
71

私のかみそりビュー内からModelState.IsValidを確認することができます方法:私はモデル状態である場合は、削除を許可するキーを提出提示しないようにしたいビューで私はアクションメソッドに次き

 if (!ModelState.IsValid) 
     return View(vm); 

有効ではありません。私はこれを行うことができる方法はありますか?ビュー内にモデルの状態がありますか?

アップデート:私は、私は与えられた回答に基づいて、これを実装しています

  <div class="adm_td0" style=" padding: 0;"> 
      @if (ViewData.ModelState.IsValid) { 
       <input type='submit' value='Delete' name='SubmitAction' /> 
      } 
       <input type='submit' value='Cancel' name='SubmitAction' /> 
      </div> 
+0

また、あなたがHtml.AntiForgeryTokenを使用していることを確認。削除アクションは簡単に偽造できます。あなたは気にしないかもしれません - (小さな内部アプリケーションかもしれませんが)ただの警告です。ボタンが表示されていないからといって、呼び出すことはできません。また、私はクライアント側で何かが失敗していないことを確認するために、あなたのポスト上のサーバー側のmodelstateをチェックします。 –

答えて

160

ビュー内にモデル状態がありますか?もちろん

@if (!ViewData.ModelState.IsValid) 
{ 
    <div>There are some errors</div> 
} 
+0

@if(ViewData.ModelState.Errors ["errorName"]){//何か} – Owen

+12

気にしないで、私はそれを理解しました:Html .ViewData.ModelState ["PropertyName"]。エラー – Owen

+1

私は検証の要約に特定のエラーを表示するためにこれを使用しました。 @if(ViewData.ModelState.Keys.Any(x => x == "ErrorKeyName")) { @ Html.ValidationSummary(true、 "") } – N0rA

10

これは、ビュー自体にこれを必要とすることは一般的ではありませんが、あなたはそうのようにアクセスすることができます

@ViewData.ModelState.IsValid 
+1

これは以前のリクエストにも適用されます。 ABOUTを提出する要求ではありません。 –

+0

@ChrisKookenリクエストの意味を明確にすることはできますか?私の理解では、ModelStateは、その時点でサーバーによって処理されている要求のモデルバインディングからのエラーの状態を含みます。 –

+2

@NormanH、* viewData.ModelState.IsValid'を* view *で使用すると、ビューを表示する直前に処理されたモデルの状態が表示されます。したがって、フローは次のようになります。ビューA - >プレスボタンとポスト - >コントローラ:メソッドBの前にモデルバインド - 無効な状態 - >メソッドBはビューBを返します - > '@ ViewData.ModelState.IsValid'メソッドB – bvgheluwe

関連する問題