こんにちは、フォーム(自動マッピング)
私はASP.NET MVCアプリケーションを構築し、データ処理といくつかの問題を抱えているのです。
私の行動の一つは、次のようになります。
public ActionResult Register(int categoryId, int? filterId)
このアクションは、DB(Entity Frameworkの)からのデータでカスタムのViewModelオブジェクトをロードして送信することを意味登録フォームと、この場合にはinstansiateます強く型付けされたビューに変換します。
[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(ModelViewRegisterFilter filter)
このアクションを実行します:ユーザーがデータを変更し、followinアクションがトリガされます提出ヒットしたとき、私はAutoMapper
を使用していますビューオブジェクトにモジュールオブジェクトを変換するために
次のコード:
if(filter.EditingFilter.Id > 0)
adCategoryFilter = Mapper.Map<RegisterFilterItem, AdCategoryFilter>(filter.EditingFilter, filterModel.GetFilter(filter.EditingFilter.Id));
else
adCategoryFilter = Mapper.Map<RegisterFilterItem, AdCategoryFilter>(filter.EditingFilter);
adCategoryFilterはModel(db)のクラスです。これが行われると、エンティティモデルオブジェクト(adCategoryFilter)を保存する際に問題はないはずです。
問題1 私はdbテーブルcaled DisplayCheckBoxにフィールドを持ち、nullable tinyint型です。これを表現するために、私はビューオブジェクトにヌルブルブールを作成しました。モデルからのModelViewに変換するためにAutoMapperを使用したとき、私は次の例外を取得:
は System.Nullable`1 [[可能System.Boolean、 mscorlib、バージョン= 4.0にSystem.Byteをマップしようとしています。 0.0、 文化=ニュートラル、 PublicKeyToken = b77a5c561934e089]]。 Biss.Views.ViewClasses.RegisterFilterItem 先プロパティに Biss.Models.Model.AdCategoryFilterのマッピング設定を使用:DisplayCheckBoxタイプ の 例外を 'AutoMapper.AutoMapperMappingException' がスローされました。
私はモデルクラスの生成されたプロパティをchekedて、それは次のようになります。
Nullable<global::System.Byte>
問題2のフォームは、フォームからのviewmodelオブジェクトがデータで満たされます提出され 。値が ""(string.empty)のtextBoxがある場合、文字列はnullに設定されます。
このテキストボックスを表すdbフィールドはnchar(100)型で、これはエンティティフレームワークによって文字列に生成されます。問題はautomapperがモデルオブジェクトにDisplayTextBoxプロパティにnull値を設定し、それがfollowin例外がスローされますしようとすることです。
このプロパティをNULL値に設定することができません。
喜んでアドバイスします。
実は、Automapperについてのあなたのポイントが正しくありません。彼が行う必要があるのは、Mapを呼び出す前にCreateMapを呼び出すことだけです。 –
rboarman
それは変です。私は何か特別なことをすることなく、その場でAMを使用しました。 – rboarman
これは新しい質問を生成します1 =バインド属性を使用するといくつかのプロパティが除外されますが、AutoMapperを使用してViewObjectをDataModelObjectにマップすると、この機能はどのように機能しますか?私はdb(DataModelObject)からの "実際の"データがViewObjectの未設定のプロパティに置き換えられることを納得させますか? – Banshee