問題タブ [modelbinders]
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.
asp.net-mvc - ASP.NET MVCがデータバインディング中に読み取り専用プロパティを気にするのはなぜですか?
編集:これ以外のMVC3ソリューション(存在する場合)を探しているため、報奨金を追加しました:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
'Address'モデルに読み取り専用プロパティがあります'CityStateZip'
。
これは、米国の住所から都市、州、zipを取得するための便利な方法です。国が米国でない場合は例外がスローされます(発信者が最初にチェックすることになっています)。
これは私のモデルの一部なので、バインドされます。ASP.NET MVC2 RC2より前は、このフィールドによってデータバインディング中に問題が発生することはありませんでした。私はそれについて本当に考えたことさえありませんでした-結局のところ、それは読み取り専用です。
2010年1月のRC2リリースでは、データバインディング中にエラーが発生しますが、デフォルトのモデルバインダーがこの値をチェックするように見えるためです(読み取り専用ですが)。
このエラーがトリガーされるのは、「base.OnModelUpdated」行です。
モデルバインダーへの直前の変更により、明らかにこの動作の変更が発生しましたが、その結果が何であるか、またはこれがバグであるかどうかはまだよくわかりません。私はこれをMVCチームに渡しますが、その間に他の誰かがこのプロパティのバインドを防ぐ方法について何か提案があれば興味があります。
この記事は変更について読む価値がありますが、読み取り専用プロパティについてはまったく触れていません(私が期待していることではありません)。問題(ある場合)は、この状況よりも広範囲である可能性があります-もしあれば、逆効果についてはよくわかりません!
@haackedによって要求されたように、ここにスタックトレースがあります:
これは、任意のモデルに次の行を追加し、対応するアクションメソッドに投稿するだけで取得できます。この例では、可能な限り単純なモデルに追加しました。
[TargetInvocationException:オブジェクト'Rolling_Razor_MVC.Models.ContactUsModel'のプロパティアクセサー'Foo'が次の例外をスローしました:'bar'] System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component)+390System.Web.Mvc。<>c__DisplayClassb。<GetPropertyValueAccessor>b__a()+18 System.Web.Mvc.ModelMetadata.get_Model()+22System.Web.Mvc。 ModelMetadata.get_RealModelType()+29System.Web.Mvc。<GetValidatorsImpl>d__0.MoveNext()+38System.Linq。<SelectManyIterator>d__14`2.MoveNext()+273System.Web.Mvc。<Validate>d__5。 MoveNext()+644 System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext、ModelBindingContext bindingContext)+92 System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext、ModelBindingContext bindingContext、Object model)+60System.Web.Mvc。 DefaultModelBinder.BindComplexModel(ControllerContext controllerContext、ModelBindingContext bindingContext)+1048 System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext、ModelBindingContext bindingContext)+280 System.Web.Mvc.Controller.TryUpdateModel(TModel model、String prefix、String [] includeProperties、String [] extractProperties、IValueProvider valueProvider)+449 System.Web.Mvc.Controller.TryUpdateModel(TModelモデル)+73
asp.net-mvc - 複雑な強い型のオブジェクト+デフォルトのModelBinder
私は次の複雑なモデルを持っています:カテゴリ-持っている->持っているリスト->リスト
既存のすべてのカテゴリをプルして、サブアイテムを含む1つのリストをカテゴリごとに挿入できる作成アクションを作成しようとしています。例:-Cat1 --NewItemGroup1 --- NewItem1 --- NewItem2 --- NewItem3 --- NewItem4
-Cat2 --NewItemGroup2 --- NewItem1 --- NewItem2 --- NewItem3 --- NewItem4
私の質問ですが、デフォルトのモデルバインダーを使用してこれを達成できますか?または私は何か他のものを使うべきですか?そしてそれはどれくらいの仕事を追加しますか:)?
ありがとう!
asp.net-mvc - What is the difference between BindProperty and SetProperty on IModelBinder
I'm creating a custom model binder in an Mvc application and I want to parse a string to an enumeration value and assign it to the model property. I have got it working overriding the BindProperty
method, but I also noticed that there is a SetProperty
method.
I’m not sure what the difference is between the two and whether I am doing this in the recommended way.
c# - Asp.net MVC で既存のオブジェクトにデータをバインドする
ASP.Net MVC モデル バインダー内では、バインドされた型のオブジェクトを作成し、そのプロパティを更新できます。
例えば
このコードで、コントローラーからの TryModelUpdate() のような BindModel(child) 呼び出しに似たものがあるかどうかを知りたいですか?
asp.net-mvc - ASP.NET MVC RC2 で変更された ModelBindingContext.ValueProvider インターフェイスで動作するようにカスタム ModelBinder を更新する方法
コンマ区切りのリストを取得し、空の値を消去してから、デフォルトのモデル バインダーに渡すカスタム モデル バインダーがあります。これは ASP.NET MVC Preview 2 で機能しましたが、RC2 にアップグレードすると、ValueProvider のインターフェイスには GetValue() メソッドしかなく、[] アクセサーがないため、以下はコンパイルされません。以下で行っていることは、バインディング コンテキストの他のメカニズムを通じて可能ですか? このような単純な状況では、本格的なモデル バインダーを作成する必要はありません。主な目標は、値が List<SomeEnum> にバインドされるときであり、空の値はスキップされます。
asp.net-mvc - リストにバインドするときに DefaultModelBinder に空のアイテムを無視させる方法はありますか
列挙型のリストにバインドする方法で DefaultModelBinder の動作を変更したいシナリオがあります。
私は列挙型を持っています...
そしてモデルのクラス...
POST本体は...
現在、モデル バインド後、MyEnums プロパティには次のものが含まれます。
MyEnums プロパティが次のようになるように、投稿されたデータの空の値を無視するようにモデル バインダーに指示する方法はありますか?
asp.net-mvc - ASP.NET MVC2 - カスタム モデル バインダーの例
処理する必要がある独自のバインディング シナリオ用にカスタム モデル バインダーを構築する例をいくつか見つけようとしていますが、見つけた記事はすべて、MVC2 には関係のない古いバージョンの MVC に関するものでした。私は DefaultModelBinder ソース コードを参照して、何をする必要があるかについて一般的な感覚を得ようとしましたが、私のシナリオよりも完全に複雑であり、実装する必要がある特定のロジックを分離するのに問題があります。
私の目標は、チェックボックス/テキストボックスのペアのコレクションを取得することです。すべてのチェックボックスのペアに対して、チェックボックスの値と関連するテキストボックスの値のキーと値のペアを作成したいと考えています。このデータを集約した後、目的のモデル タイプの文字列プロパティに格納できるように、コレクションに対して文字列のシリアル化を行う必要があります。特定のチェックボックスを特定のテキストボックスに関連付けることができる管理可能な形式でフォームから送信されているデータは既にあります。必要な場所にあるすべての部分を取得する方法を理解するだけです。
カスタム モデル バインダーの構築を開始できる最新のチュートリアルを知っている人はいますか?
asp.net-mvc - ASP.NET MVC - 配列を処理できるカスタム モデル バインダー
ユーザーが任意の形式で価格を入力できるようにする機能を実装する必要があります。つまり、入力として 10 米ドル、10 ドル、10 ドルなどを許可する必要があります。
Price クラスのカスタム モデル バインダーを実装することで、これを解決したいと考えています。
フォームには配列または Price がキーとして含まれています
ViewModel には Price プロパティが含まれています。
デフォルトのモデル バインダーは、ユーザーが 10 進数に変換可能な文字列を [値] 入力に入力する限り、うまく機能します。「100 USD」のような入力を許可したいと思います。
これまでの価格タイプの私のModelBinder:
配列を正しく処理するカスタム モデル Binder を実装するにはどうすればよいですか?
asp.net-mvc - Asp.netMVCのカスタムDateTimeモデルバインダー
タイプ用に独自のモデルバインダーを作成したいと思いDateTime
ます。まず、次のようにモデルプロパティにアタッチできる新しい属性を記述します。
これは簡単な部分です。しかし、バインダー部分はもう少し難しいです。タイプの新しいモデルバインダーを追加したいと思いDateTime
ます。私はどちらかができます
IModelBinder
インターフェイスを実装し、独自のBindModel()
メソッドを作成します- メソッドを継承し
DefaultModelBinder
てオーバーライドするBindModel()
私のモデルには、上記のようなプロパティがあります(Birth
)。したがって、モデルがリクエストデータをこのプロパティにバインドしようとすると、モデルバインダーBindModel(controllerContext, bindingContext)
が呼び出されます。すべて大丈夫ですが。日付を正しく解析するために、controller / bindingContextからプロパティ属性を取得するにはどうすればよいですか?どうすればPropertyDesciptor
物件のに行くことができますBirth
か?
編集
関心の分離のため、私のモデルクラスは、System.Web.MVCアセンブリを参照しない(そして参照すべきではない)アセンブリで定義されています。カスタムバインディング(Scott Hanselmanの例と同様)属性を設定することは、ここでは不要です。