問題タブ [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.

0 投票する
6 に答える
24408 参照

asp.net-mvc - Jsonから返されたモデルステートエラーを読み取る方法は?

JSON によって返された ModelState エラーを表示するにはどうすればよいですか?

私はこのようなことをしたい:

ModelState エラーを読み取って表示するには、ビュー内のコードは何にする必要がありますか?

JSON 値を読み取るためのビュー内の実際のコードは次のとおりです。

0 投票する
14 に答える
83918 参照

c# - ASP.NETMVCModelStateエラーをjsonに変換する方法

すべてのModelStateエラーメッセージのリストを取得するにはどうすればよいですか?私はすべてのキーを取得するためにこのコードを見つけました:( ModelStateエラーのあるキーのリストを返す

しかし、エラーメッセージをIListまたはIQueryableとして取得するにはどうすればよいですか?

私は行くことができます:

しかし、それは手動で行います-確かにLINQを使用してそれを行う方法はありますか?.ErrorMessageプロパティはチェーンのはるか下にあるため、LINQの記述方法がわかりません...

0 投票する
2 に答える
4786 参照

asp.net - falseを返すasp.net MVC ModelState.IsValid

ASP.NET MVC アプリケーションで作業しています。次のようなビューモデルがあります。

UI パースペクティブから、ユーザーは日付を mmddyyyy として入力できます。また、ユーザーが 01012001 などの形式で入力すると、コントローラーの ModelState.IsValid コード部分が false を返します。ModelState をざっと見てみると、「値 01012001 は SampleDate に対して有効ではありません」というプロパティ "SampleDate" のエラーが表示されます。

モデルバインダーで、OnModelUpdated イベント中に、値 01012001 を 01/01/2001 にフォーマットしようとし、それを SampleInterestViewModel.SampleDate に戻して、ModelState.IsValid がエラーなしで true を返す可能性があると考えました。しかし、それでも ModelState.IsValid は false であり、ModelState ディクショナリを調べたところ、この特定のプロパティにはまだそのエラーがコレクションに含まれています。

最後に、01012001 をフォーマットして、値 01/01/2001 を ModelState ディクショナリのプロパティ SampleDate に直接更新しようとしました。ただし、ModelState.IsValid は false であり、SampleDate プロパティに対して同じエラーが表示されます。ModelState.IsValid が機能する理由と、いつどのように false に設定されるかを理解できません。

ユーザーが UI に 01012001 を入力した場合でも、modelbinder で 01/01/2001 にフォーマットし、ModelState.IsValid が true であることを確認して、残りのコントローラー コードが期待どおりに動作できるようにする必要があります。UI では、sampleDate 値を投稿するために AjaxSubmit を実行しています。

任意の考えやコメント。

0 投票する
3 に答える
382 参照

asp.net-mvc - 検証前にプロパティをコピーする必要がある

検証が必要なかなり複雑なモデルがあります。問題は、このモデルが 2 つの異なる場所で使用されていることです。1 つは顧客を登録する場所、もう 1 つは単に住所を追加する場所です。住所の一部のフィールドは、顧客登録フォームには表示されません。したがって、ModelState.IsValid かどうかを確認すると、もちろん false になります。名前は請求先住所には入力されませんが、顧客には入力されます。そのため、検証が行われる前に、いくつかのフィールドをモデルにコピーしてから検証したいと考えています。私はやや迷っていますが、助けが必要です。

私のアクションは次のようになります。

ただし、常に false を返し、ModelState.IsValid は false のままです。

0 投票する
1 に答える
1102 参照

asp.net-mvc - ASP.NET MVC: HtmlHelper.TextBox とカスタム モデル バインダーを使用した null 参照例外

を実装するクラスを作成しましたIModelBinder(以下を参照)。このクラスは、それぞれが日付値の一部 (日、月、年) を表す 3 つの入力を持つフォームを処理します。HtmlHelperまた、フォームに 3 つのフィールドを出力するための対応する拡張メソッドも作成しました。

日、月、年の入力に解析可能な値が与えられたが、別の値が検証に失敗した場合、すべて問題ありません。フィールドが再入力され、期待どおりにページがユーザーに提供されます。

ただし、無効な値が指定さDateTimeれ、解析できないDateTime場合は、ユーザーに返されるときにフィールドが再設定されるように任意の値を返します。

私は人々が抱えていた同様の問題について読みましたが、それらはすべて電話の欠如が原因のようSetModelValue()でした. 私はこれを行っていませんでしたが、問題を追加しても解決されていません。

日付の Year プロパティのテキストボックスを作成しようとすると、null 参照例外がスローされますが、不思議なことに、Day または Month ではありません!

これがなぜなのか説明できる人はいますか?

0 投票する
1 に答える
1499 参照

asp.net-mvc - MVCContrib の ModelStateToTempData 属性が機能しないのはなぜですか?

検証の目的で、ModelState を同じコントローラー内のあるアクションから別のアクションに渡そうとしているだけです。ただし、モデルの状態は更新されません。TempData["____MvcContrib_ValidationFailures____"] には、転送アクションからの ModelStateDictionary が含まれていることがわかりますが、これは現在の ModelState に自動的に転送されるはずだと思いましたか? どこが間違っていますか?

ASP.NET MVC2 と MVCContrib 2.0.36.0 を使用しています。この属性で Controller を装飾することも試みましたが、結果は同じです。

コード:

0 投票する
1 に答える
1410 参照

asp.net-mvc - MVC2ModelState-すべてのエラーを表示

私のasp.netフォームは、誤ったモデルに関連するエラーをスローしていますが、ページには、どのモデルフィールドがエラーをスローしたかが表示されません。ModelStateのすべてのエラーをDebug.WriteLineにしたいのですが、どうすればよいかわかりません。何か案は?

0 投票する
1 に答える
1169 参照

.net - .Net MVC2 カスタム ValidationAttribute を使用するときに ModelState にエラーを追加する方法

次の ValidationAttribute クラスがあります

コンストラクターで 2 つの日付プロパティ名と演算子を使用します。

検証メソッドでは、ステートメント LeftDate Operator RightDate の結果が返されます。

これは AttriuteTargets.Class 属性であるため、検証が失敗する原因となっているプロパティをフレームワークが認識できないことはわかっています。しかし、失敗しているのは Left Date プロパティであることを知っているため、モデル状態のエラーの ID をこのプロパティに設定したいと考えています。この理由は、失敗したフィールドをフォームでマークしたいからです。

質問: ModelState のエラー コレクションに追加されたエラー項目を変更して、その ID がフォームの特定のフィールドに対応するようにするにはどうすればよいですか?

0 投票する
3 に答える
1439 参照

asp.net-mvc - ASP.NET MVC 2 のモデルのプライベート プロパティに対して ModelState が無効であると報告される

私は ASP.NET MVC 2.0 を使用しており、コントローラーのモデル バインディングとモデル状態の検証を利用しようとしています。しかし、私は問題に直面したので、ここにいる人々と共有して、あなたの考えを知りたいと思いました.

わかりました、モデル クラス ライブラリにきれいなユーザー poco があります...

私が目指した設計では、オブジェクトが構築された後、特定のプロパティのみを編集できます。たとえば、 UserName は、オブジェクトが構築されたときにのみ設定できます。これは私にとっては理にかなっていますが、私の問題の鍵であるため、ここで強調したいと思いました。

次に、 User クラスの検証メタデータを定義する「仲間クラス」を作成します...

}

次に、Web レイヤーで、ユーザーがこのオブジェクトを編集できるようにします。したがって、プロファイル コントローラーには次の 2 つのアクション メソッドがあります。

これには、強く型付けされたビューがあります...

これですべてのコードが終わりました!!

ここに問題があります。ビューは、最初の get 要求の後に正常にレンダリングされます。しかし、ユーザーが表示名を編集した後などにフォームを投稿すると、ModelState は無効になります。これは、UserName プロパティにプライベート セッターがあるためです。ただし、これは設計によるものであり、セキュリティとセマンティクスのために、ユーザー名を変更したくないため、セッターはプライベートです。ただし、プロパティに Required 属性を追加したため、設定されていないため失敗しています。

問題は、モデルバインディングがこれを検証エラーとして報告するかどうかです! プロパティはプライベートであるため、設定されないように設計されているため、設計上、モデル バインダーが設定することは想定していませんが、検証エラーは発生しません。設定できるプロパティの検証エラーのみを生成する必要があると思います。

わかりましたので、これまでに思いついた可能な解決策..

プロパティを公開します。

これを行うと、既存のユーザーのユーザー名を変更できるようになります。これをキャッチするには、どこかに追加のロジックを追加する必要がありますが、あまり良くありません。また、アクション メソッドに Bind Exclude を追加して、悪意のあるユーザーが投稿を介して設定しようとするのを阻止する必要があります。

エラーを取り除く

ModelState ディクショナリからエラーを削除できると思います。この場合はこれで問題ありませんが、プライベート セッターを持つすべてのオブジェクトにこれを追加する必要があるため、コードの臭いが発生すると思います。多分忘れます!!

インターフェイスに対して自分のビューを強く型付けする

ビューをモデルのインターフェースにバインドする人もいると読んだことがあります。これは、ビジネスモデルオブジェクトへの ModelView インターフェースの王様です。このアイデアは気に入っていますが、自動バインドが失われ、Web レイヤーでモデル オブジェクトとそのコンストラクターを複製する必要があります。これに関する情報はhttp://www.codethinked.com/post/2010/04/12/Easy-And-Safe-Model-Binding-In-ASPNET-MVC.aspxにあります。

モデル ビューを使用する

これは私にはDRYに見えませんか?! 適合する既存のモデル オブジェクトがない場合は、喜んでこれらを使用します (たとえば、サインアップ モデル ビューを使用します)。

CustomModelBinder

私の好みのオプションですが、自分が何をしているのかわかりません!! 設定できるプロパティにのみバインドするようにバインダーを取得できたら、笑ってしまいます!!

人々はどう思いますか?上記のオプションに関するコメント、その他の解決策はありますか?私のアーキテクチャとは的外れですか?!

ありがとう :)

0 投票する
3 に答える
2891 参照

c# - ASP.NET MVC フォームが無効化された場合、フィールド値を保持するにはどうすればよいですか?

電子メールを送信する前に、いくつかの検証を行っているフォームがあります。

メソッドValidateInputが入力に応じてModelStateを設定する検証にこれを使用してみました:

何かが無効な場合、これにより、入力されたすべてのフィールドがクリアされます。フィールドに入力したすべてのデータを保持したい。どうやってやるの?