問題タブ [modelstate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
data-binding - ModelState には Form 値が含まれていません
私はこのビューモデルを持っています:
このビューの場合:
そして、これはフォームを取得するアクションです:
(ヘブライ語のメッセージで申し訳ありません:-D)
問題: formCollection の値を見ると、フォームの詳細が表示されますが、何らかの理由でモデルの更新メソッドが機能しません。モデル状態キーを調べたところ、渡したルート値 (menuItemID) のみが取得されていることがわかりました。しかし、なぜ?すべてのフォーム コレクションを取得して更新することを想定していませんか?
モデルステートがすべて空になるように、非表示フィールドにIDも渡そうとしました...
何か案は ?
アップデート:
この行を変更しました: UpdateModel(item);
これに:
これは正しく行う方法ではないことはわかっていますが、その間はうまくいきます...これを解決する方法を知っている人はいますか?ありがとう!
asp.net-mvc - TryUpdateModel の前に値プロバイダーを更新する
PetsName というプロパティを持つクラスがあるとします。画面に空白のままになっている場合は、値プロバイダーを更新したいので、ユーザーがペットの名前を入力しない場合は、強制的に「無名」にします。これは実際のシナリオではありません..これはもちろんサンプルであるため、「Webページにデフォルト値を設定するだけ」などの回答は、このシナリオには適合しません:)
主な問題は、値を更新して、モデルを更新するときにオーバーライドしたものを使用することです。1つのアイデアは、値を削除して追加することだと思います。ModelState を確認すると値が更新されていますが、TryUpdateModel を呼び出しても値は更新されません。以下で行っていることは確かに正しい可能性があり、ここには別の問題がありますが、最初にこれを試してみることにしました。ありがとう!
asp.net-mvc - リストの必須フィールドで ModelBinder エラーを防ぐ方法は?
データベースの EntityFramework からこのオブジェクトを作成しました。
私のCreate Viewでは、次のようなことをします
そして私のコントローラーで
問題は、すべての言語の名前のみを送信できるため、ModelState が常に無効であることです。すべての言語でターゲットを翻訳する必要はありませんが、db では名前が必須であるため、モデル Binder でエラーが発生します。
私の質問は次のとおりです。このエラーを修正するには、どこで操作する必要がありますか?
モデルバインダーレベルで?
ModelState.IsValis 呼び出しの前のコントローラーで? そしてどうやって?
このケースは多くの人に起こっていると確信していますが、エレガントでスケーラブルなソリューションを見つけることができません。
ありがとう。
asp.net-mvc - コレクション、IEnumerable に必須の属性検証を適用する
各コレクションに含まれる要素の数を知らなくても、検証のような必須属性を次のように適用するにはどうすればよいですか。
IntCollection の場合、すべての要素を必須にする必要があります。IntAndStringAllValueCollection の場合、すべての Key とすべての Value を必須にする必要があります。IntAndStringValueValidationCollection の場合、キーを必須にする必要はありませんが、値を必須にする必要があります。
asp.net-mvc - マルチパートモデルをどのように検証しますか?
一度に送信される多数のマルチパートデータを含む非常に大きな注文フォームに取り組んでいます。私はそのトリックを使用して、HTMLで30〜40のアイテム行をレンダリングし、ユーザーがjQueryを使用して多かれ少なかれ「表示」または「非表示」にできるようにします。
問題は、たとえば3つの行が「表示」されていて、たまたま3つすべてが完全に入力されている場合でも、27の無効な(空の)アイテムが追加で送信されるため、モデルが検証されないことです。
私の解決策は、組み込みのモデル検証をねじ込み、ModelState.AddModelError()でカスタムモデル検証を使用することでしたが、コントローラーレベルでモデル検証を繰り返さなければならないような気がします。
これを処理するためのより良い方法はありますか?
visual-studio-2010 - html.ValidationSummaryにテキストを手動で追加しますか?
私はmvc2にかなり慣れていないので、データアノテーションなどの記述をたどると、検証の概要に1行のテキストを手動で追加できるコードに出くわしました。
過去2、3時間検索しましたが、間違ったものを検索しているだけだと思うようになりました。私が探しているカスタムバリデーターではありませんが、コントローラーから呼び出してエラーメッセージを追加できるものです。
誰かが私が話していることを知っていますか?
編集:タイトルを少し明確にしました
c# - カスタム例外による ASP.NET MVC 2 モデル エラー
カスタム例外クラスがあります:
.ToDescription
MyExceptionEnum
例外エラーの詳細に列挙型から文字列へのマッピングを提供するための拡張メソッドです。
これが私がそれを投げる方法です:
したがって、最初の ctor を使用して、特定のメッセージで新しい例外を作成します。
次にコントローラに:
そして最後にビューからのスニペット:
動作しません (デバッグ時に例外がスローされ、モデルの状態にエラーが追加されますが、ページには何も表示されません)。
しかし、次の行に変更すると:
できます。
AddModelError
には 2 つのオーバーロードがあります。
- 文字列、例外 (私には機能しません)
- 文字列、文字列 (作品)
それでは、最初のオーバーロードの使用は何ですか? 私の例外には内部例外メッセージがあるので、HTML 拡張機能がそれをレンダリングすると思っていたでしょうか?
では、ModelState でカスタム例外をどのように処理すればよいでしょうか? 2 番目のオーバーロードの使用は正しいですか?
asp.net-mvc - HttpPost で ModelState が無効な場合、ASP.NET MVC は更新されたモデルを自動バインドします。
私は ASP.NET MVC2 アプリに取り組んでいます。私は、MVC が ModelState とモデル バインディングに関係して舞台裏で行っている、非常に驚くべき、しかし驚くべきことに気付きました。大量のデータを持つ ViewModel があります。一部のフィールドはフォームの一部であり、他のフィールドは単に UI の一部です。HttpPost では、私の Action メソッドは、モデル全体をバインドしようとする DefaultModelBinder を使用しますが、フォームの一部であったフィールドのみが正常に逆シリアル化され、その他はすべて null のままです。それはそれでいいし、理解できる。ModelState が無効な場合は、データベースからモデルを更新し、それらの特定のフォーム フィールドをバインドしてから、同じ編集ビューに戻って関連する ModelState 検証エラーを表示する必要があります。
ここで私の驚きと好奇心が生まれます。フォーム フィールドを更新されたモデルにバインドするUpdateModel()
には、またはを呼び出してTryUpdateModel<>()
、新しく更新されたモデルを渡す必要があると想定していました。例えば:
refreshedModel
しかし、私が見つけたのは、 を呼び出さずに単にビューに戻った場合TryUpdateModel<>()
、更新されたモデルが投稿されたフォーム フィールドの値に自動的にバインドされていたことです!! したがって、TryUpdateModel<>()
ここでは必要ありません。
私がそれを理解できる唯一の方法は、ModelState が無効な状態にあるため、更新されたモデルでビューを返すと、「MVC レンダリング エンジン」が ModelState エラーをループし、それらのプロパティ値を更新された値にバインドすることです。モデル。それは単に素晴らしいです!しかし、私はこの仮定の証明が必要です。これに関するドキュメントはウェブ上のどこにも見つかりません。なぜ/どのようにこの素晴らしい自動バインド動作が発生しているかという私の仮説を誰かが確認できますか、および/またはそれがなぜ/どのように発生しているかについて教えてくれますか?
nunit - 単体テスト時にモデルが自動的に検証されない
コントローラー アクションの一部を次に示します。
アプリケーションを実行すると、if ステートメントが呼び出される前にモデルが自動的に検証されます。ただし、このコードを単体テストしようとすると、自動検証は行われません。
FormCollection を使用して代わりに TryUpdateModel を呼び出すと、検証が行われますが、それは使用したくありません。
if ステートメントの前に TryValidateModel(model) を呼び出すと、問題がうまく回避されることがわかりました。コードを 1 行追加するだけです。しかし、私はむしろそれを取り除きたいと思います。
単体テストでは自動検証が行われず、アプリケーションの実行中に行われる理由はありますか?
編集: 言及するのを忘れて、私は ASP.NET MVC3 RC1 を使用しています。違いがあれば、コントローラーの HTTPContext オブジェクトをモックしています。
asp.net - ValidationAttributes を手動で呼び出すには? (DataAnnotations と ModelState)
一部のロジックでは、モデルのプロパティを反復処理してプロパティを自動バインドする必要があり、機能を拡張して C# 4.0 の新しいデータ注釈を含めたいと考えています。
現時点では、基本的に、すべての ValidationAttribute インスタンスに読み込まれている各プロパティを繰り返し処理し、Validate/IsValid 関数を使用して検証しようとしていますが、これはうまくいかないようです。
例として、次のようなモデルがあります。
属性をチェックするコードは次のとおりです。
コードをデバッグしたところ、モデルには 3 つの属性があり、そのうちの 2 つは ValidationAttribute から派生していますが、コードが Validate 関数を (空または null 値で) 通過すると、期待どおりに例外がスローされます。
私はばかげたことをしていると思っているので、誰かがこの機能を使用して助けてくれるかどうか疑問に思っています.
前もって感謝します、ジェイミー