なぜASP.NET MVCケ私の読んだ物件の中databinding?
-
18-09-2019 - |
質問
編集:追加恵みのでんを求めてMVC3ソリューション(存在する場)以外のす:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValuetypes=false;
私は読み込みいただけます(有料)自分のメールアドレス"モデル 'CityStateZip'
.
だから便利な方法市の状態を、zipでのさらなるアドレスです。場合に例外をスローするポリシーの呼び出し側はチェックするものではありません。
public string CityStateZip
{
get
{
if (IsUSA == false)
{
throw new ApplicationException("CityStateZip not valid for international addresses!");
}
return (City + ", " + StateCd + " " + ZipOrPostal).Trim().Trim(new char[] {','});
}
}
このモデルで取得した。以前ASP.NET MVC2RC2この分野いによる問題の中でdatabinding.いもんについて考えたことを発表したのみで読みます。
現在では、2010年にはRC2のリリースでもエラー時のdatabinding-わけにデフォルトモデルのバインダーをしたいと思われているチェックす値であっても読みます。
である。OnModelUpdated線の原因となるこのエラーがトリガされます。
public class AddressModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
base.OnModelUpdated(controllerContext, bindingContext);
昨分の変更modelbinder明らかに起因するこの動作に変更がいないのrepurcussionsでいるかどうかにかかわらずこのバグ?私はこのMVCチームがんば誰もがあらゆる提案のなかでこれを防止すから物件ます。
この記事ではよく読み、変更がないも読み取り専用特性の全くなることは期待したい。の問題がある場合には、一するよりも広いこと-私はいつrepurcussions合!
として求@haackedこちらはstacktrace:
を取得します追加するだけ以下の行為モデルをポストに対応するアクショ法です。このインスタンス値もっとも単純なモデルです。
public string Foo { get { throw new Exception("bar"); } }
[TargetInvocationException:件のアクセス用メソッド'Foo'にオブジェクト'Rolling_Razor_MVC.モデルです。ContactUsModel'投げた以下の例外:'bar'] システム。ComponentModel.ReflectPropertyDescriptor.GetValue(オブジェクトコンポーネント+390 システム。ます。Mvc.<>c__DisplayClassb.<GetPropertyValueAccessor>b__a()+18 システム。ます。Mvc.ModelMetadata.get_Model()+22 システム。ます。Mvc.ModelMetadata.get_RealModelType()+29 システム。ます。Mvc.<GetValidatorsImpl>d__0になります。MoveNext()+38 システム。Linq.<SelectManyIterator>d__14`2.MoveNext()+273 システム。ます。Mvc.<Validate>d__5.MoveNext()+644 システム。ます。Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext,ModelBindingContext bindingContext)+92 システム。ます。Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext,ModelBindingContext bindingContext、オブジェクトモデル)+60 システム。ます。Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext,ModelBindingContext bindingContext)+1048 システム。ます。Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)+280 システム。ます。Mvc.コントローラです。TryUpdateModel(TModelモデル,String prefix,String[]includeProperties,String[]excludeProperties,IValueProvider valueProvider)+449 システム。ます。Mvc.コントローラです。TryUpdateModel(TModelモデル)+73
解決
思いのと同じ問題です。私の詳細:
http://forums.asp.net/t/1523362.aspx
編集:応答からMVCチーム(上記URL):
我々はこれを締結していることを検証システムが正しています。以降、モデルの検証を試みる実証全性、非null値型に関するプロパティを暗黙的に[必須]の属性は、今の検証この財産を呼び出してゲッターコースです。またこれらの破断から変更V1の製品、その実行に必要な新しいモデル検証システムの正しく動作しなければならない。
お持ちの複数のオプションに動作します。これらのいずれかの要:
- 変更の日付プロパティメソッドの代わりに、このような方法で実装することが可能です。によるMVCの枠組み
- 変更の種類をDateTime?の代わりにDateTime.これは、暗黙[必須]からこの物件です。
- 明らかに静DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValuetypesフラグ。これは、暗黙[必須]からすべての非null値型の特性を応用しています。せていきたいと考えています。追加V3製品の属性を信号に"な結合するので、わからないかを検証すので、ふりこの物件は存在しない."
ってくれたことに感謝のレポート!
他のヒント
まだ有するとともに、同誌掲載号の注目とMVC3.
と思いるという方向だけです。asaxからSevenCentralの解答):
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
これを無効にされ、それらすべての
こうすべての世界のようなバグです。まったく理解できな理由のModelBinder要メンバーの件数をご確認ください読み物がありするように設計されている及び、僕に理解していない時間を過ごしてしまいます。
加え、以下のモデルのメタデータプロバイダーマせていただきますの問題
protected override CachedDataAnnotationsModelMetadata CreateMetadataPrototype(IEnumerable<Attribute> attributes, Type containerType, Type modelType, string propertyName)
{
var metadata = base.CreateMetadataPrototype(attributes, containerType, modelType, propertyName);
if (metadata.IsReadOnly)
{
metadata.IsRequired = false;
}
return metadata;
}
protected override CachedDataAnnotationsModelMetadata CreateMetadataFromPrototype(CachedDataAnnotationsModelMetadata prototype, Func<object> modelAccessor)
{
var metadata = base.CreateMetadataFromPrototype(prototype, modelAccessor);
if (prototype.IsReadOnly)
{
metadata.IsRequired = false;
}
return metadata;
}
も必要となります以下を追加。asax.cs
protected void Application_Start()
{
ModelMetadataProviders.Current = new RESModelMetadataProvider();
ModelBinders.Binders.Add(typeof(SmartDate), new SmartDateModelBinder());
...
}
もちろん思っ換 CityStateZip
へ GetCityStateZip()
そんbindでのようなsilverlightっています。この作業仮固定のための誰も体験します。
私は同じ問題!!
情報問題にお越しの ASP.NET MVC2.0未使用モデル性と呼ばれるのは掲載する際には、製品、サーバ?
こうしたプログラム当社の物件のう前提にするという予想前の物件で設/初期化されたなど)...その場合、この変更を表すクラスで実践と知りたいと思いな進め方を詰めていきます。
一方、いシンプル"がることを確認ridsの問題です。
をしていて同様の問題がある分野を期待していなかった検証をさせていただく場合がござしを受ける場合にはエラーに掲載のコントローラです。その後googlingか http://codeblog.shawson.co.uk/mvc-strongly-typed-view-returns-a-null-model-on-post-back/ 場であることが指摘された名紛争の原因になります。
いとは思っていなかったって、世界中の何万にもおよぶア変数のクラスが衝突する物件の名前、名前の変更の受信エラーの解決は私の問題です。
同じような問題がまだ存在MVC5.2.3でないものの検証コードの原因とな問題です。の DefaultModelBinder
通話のsetterか外部の検証コードであっても読み取り性ない場合であっても、要求データが渡され、コントローラーチます。
参照詳細な説明を全面的に解決。 https://stackoverflow.com/a/54431404/10987278.
くなった場合はそのソリューションできる整理作業MVC3が期待できその他まだ苦しんでるとともに、同誌掲載号の注目のバージョンのMVCる彼はこの問いとしていました。