問題タブ [custom-model-binder]
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.
c# - MVC 日時モデル バインディング
私はアプリケーションで 2 つの剣道日付ピッカーを使用しています。
ボタンがクリックされると、これらの日付ピッカーのクライアント側の値を読み取り、API コントローラーに POST を送信します。
私が抱えている問題は、DateTime パラメーターが正しく解析されないことがあります。en-GB カルチャ (web.config で指定) を使用していますが、日付が 2014 年 1 月 3 日 (3 月 1 日) の場合、値がモデル バインダーによって処理されると、2014 年 3 月 1 日 (1 月 3 日) と解釈されます。
私のjavascriptは次のとおりです。
私のモデルは次のとおりです。
解決策は、datetime 値を解析するためのカスタム モデル バインダーが必要であると考えたので、(次のように) 作成して Global.asax.cs ファイルに登録しましたが、これは機能しませんでした。バインダーが呼び出されることはありません。日時がカスタム オブジェクトのプロパティであるためかどうかはわかりません。
そして、以下のように登録されています。
誰かが私がどこで間違っているのか知っていますか?
asp.net-mvc-4 - MVC :データベースを使用して検証属性または代替を駆動する方法は?
要約すると、データベース フィールドに基づいて、実行時にインスタンス固有のデータ注釈属性を作成しようとしています。私が今持っているものは、初期モデルの作成には問題なく機能しますが、モデルがポストバックされてサーバー検証が行われると失敗します。
(ビューモデル内のコレクションで同じ入力モデルを使用していますが、コレクション内の各インスタンスに異なる検証を適用する必要があります....たとえば、入力の最初の出現は1〜100の範囲に制限される場合がありますしかし、同じ入力ページで求められる同じモデルの次の発生は、1000-2000 の範囲になります。別の値は、日付、または 6 文字の長さでなければならない文字列である可能性があります.......)
私がやったことと私の問題がどこにあるかを説明します:
DataAnnotationsModelMetadataProvider
の独自の実装を継承して提供しましたGetMetadataForProperty
(これは検証の問題とは関係ありません....まだ)
DataAnnotationsModelValidatorProvider
のファサード実装を継承して提供しましたGetValidators
。ここでやりたいことは、データベース レコードに基づいて新しい属性を作成し、それらの属性を基本実装に渡し、それに応じてバリデーターが作成されるようにすることです。
ただし...... GetValidators
は PROPERTY レベルで呼び出されます....バリデーターを適用したいプロパティ名で呼び出される場合、このプロパティ名に適用可能な DB レコードを見つけて、どの属性を見つけられるかを調べる必要があります。作成する必要があります....しかし...値フィールドのプロパティ名だけではDBレコードのキーを取得できません.....実際、DBキーは親モデルにあります.....では、どうやって手に入れるのでしょうか!?
静的変数 (YUK) を使用して、あるプロパティの呼び出し中にキーを保存し、値フィールド プロパティの別の呼び出し中にキーを取得しようとしました....しかし、モデルは一方向にシリアル化され、逆方向に逆シリアル化されるためです。キーが必要な属性と同期していないことになります。
少し複雑にするために、カスタム モデル バインダーも使用しています。ここの他の場所でアドバイスされているように CreateModel をオーバーライドしましたが、メタデータまたは追加の値を出力モデルの PROPERTY にアタッチする方法が見つかりません....モデル自体にのみ....しかし、どうすれば取得できますかPROPERTY の GetValidators 呼び出し内の MODEL メタデータ/追加値 ?
だから....私の質問は2つあります.....
1) カスタム モデル バインダーから ValidationProvider の GetValidators メソッドにデータベース キーを取得するのを手伝ってくれる人はいますか? それとも、カスタム メタデータ プロバイダーを使用しているのでしょうか?
2) データベース レコードに基づいて実行時にバリデータを作成する別のより簡単な方法はありますか?
asp.net - HTML コンテンツを含む ASP.NET MVC5 カスタム json モデル バインダー
私は FromJsonAttribute ( Steve Sandersonによって作成された) を使用しました。これは非常に優れていますが、残念ながら、AllowHtml 属性に注意を払っていません。私は次のモデルを持っています:
私のコントローラーでは、次のようにデータを受け取ります。
FromJson 属性は次のようになります。
私の問題は、AllowHtml 属性が存在する html コンテンツを渡すことができないことです。どうもありがとう!
c# - アクション パラメータにデフォルト値はありますか?
ASP.NET MVC のカスタム ModelBinder で、既定値を持つパラメーターにバインドしているかどうかを確認するにはどうすればよいですか?
デフォルト値:
デフォルト値なし:
モデルバインダー:
ユーザーがアクションへのリクエストを行い、必要なすべての情報を提供しない場合にエラーメッセージを表示したいので、これを知りたいです(デフォルト値を持たないすべてのパラメーターになります)。
c# - カスタム モデル バインディングの使用時にオブジェクト参照がオブジェクトのインスタンスに設定されない
カスタム モデル バインダーを使用してデータベースにレコードを追加しようとしています
レコードを送信しようとすると、この行に Object reference not set to instance of object エラーが表示されます
なぜこのエラーが発生するのかわかりません。
Global.asax.cs でモデル バインダーを設定する方法は次のとおりです。
私のリポジトリ
そして私のコントローラーアクション
これは私が使用している工場です: