問題タブ [defaultmodelbinder]
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# - インターフェイスで MVC4 のカスタム DefaultModelBinder を使用すると、追加のプロパティが入力されません
わかりました..保存時にコントローラーに戻すインターフェイスがあります(アイデアを理解するためにほとんどを削除しています)。必要に応じて詳細を追加できますが、全員を圧倒したくありません。
そして、私はインターフェースのいくつかの実装を持っていますが、ここに例があります...
Global.asax 内から - 開始
それでは本題です。以下のコードは、オブジェクトのタイプを判別し、適切なオブジェクトを作成します。私が思うに、すべての値が bindingContent.ValueProvider データで送信されることがわかりますが、興味深いのは、プロパティ コレクションにはインターフェイスの値のみがリストされていることです。base.CreateModel は必要な型を作成しますが、インターフェイスからのデータをオブジェクトに入力するだけです。DatabasePlatformID を設定している場所に追加のプロパティを設定する醜いコードを使用して回避できますが、一部のクラスにはいくつかの追加のプロパティがあります。私はおそらくここで明らかな何かを見逃しています。これは、このような追加のプロパティを設定するのはあまり保守的ではありません。
他のどこでも見られるコードを使用してそれを実行しようとしたことに注意してください。
これが私のコントローラーです
最後に、コントローラーを呼び出す JavaScript を次に示します。ノックアウト.jsの使用..
SelectedElements は、knockout.js の observableArray です。以下は、渡される可能性のある JavaScript オブジェクトです。この配列は、IProjectElement を実装する要素のコレクションを保持することに注意してください。また、すべての異なる型を示しているわけではありませんが、それらはすべて基本的なデータ セットを持ち、追加のプロパティを追加します。 .
c# - ASP.MVC 4 DefaultModelBinder がリストへの空の文字列バインディングで失敗する
したがって、空の文字列をこのようにコントローラーに投稿すると
それをリストにバインドしようとすると、非常に奇妙なことが起こります
誰もこの問題に直面しましたか?
デフォルトの int 値をリストに追加するのはなぜですか?
c# - ASP.NET MVC5 モデル バインダー - コレクションのコレクションをバインドする場合は Null
私はネット全体を調査しましたが、ここで誰かが私を助けてくれることを願っています。
次の ViewModel クラスがあります。
編集ビューでは、カスタム EditorTemplate を使用して、興味のコレクションをレイアウトします@Html.EditorFor(m => m.Interests)
。レンダリングを行う 2 つの EditorTemplates があります。
DictionaryRootViewModel.cshtml:
/li>DictionaryItemViewModel.cshtml:
/li>
問題:
POST を使用してフォームを送信するInterests
と、コレクションのみが入力され、Interest.Items
コレクションは常に空になります。リクエストには (特に) 次のフィールド名が含まれています。これらは、コントローラー アクション メソッドで Request.Forms データを検査するときにも存在します。
- 興味[0].ID
- 興味[0].名前
- Interests[0].Items[0].Id
- Interests[0].Items[0].Selected
すべてに適切な値が含まれていますが、コントローラー側では、オブジェクト pvm in メソッド:
Interests コレクション (正しい ID と名前を持つ項目) にデータが含まれていますが、コレクションの各要素について、項目のサブコレクションは空です。
モデルを正しく選択するにはどうすればよいですか?
c# - DateTime.Parse が MVC カスタム バインダーで機能しない
.NET MVC Web アプリケーションのアクションで暗黙的なバインディングから DateTime を取得しています。問題は、「dd/MM/yyyy」の形式でAjaxを使用してクエリ文字列を送信しているときに、「MM/dd/yyyy」の形式で日付を取得していることです。
これは、POST ではなく GET プロトコルを使用する場合の .NET MVC Binder の既知の問題であることを知っているので、日付を正しい形式に解析するカスタム バインダーを実装しました。コードは次のとおりです。
しかし、そのコードでは解析は機能せず、何もしません。「01/04/2014 11:37:00」(4 月) のような日付でテストしており、「result.Date」で「04/01/2014 11:37:00」という日付を取得しています。 (1 月)、解析前と解析後。
問題は、「DateTime.Parse」メソッドが日付を正しく解析しないのはなぜですか?
アップデート:
SearchVM のコードは次のとおりです。
そしてここにコントローラーのアクションのヘッダーがあります:
ありがとうございました。