2013-05-10 18 views
5

ViewModelsを使用してタートしようとしていますが、このPOSTの検証に問題があります。モデルの値はコードの下の時計部分に表示されますASP.Net MVCでAutoMapperを使用する方法を修正しました

ModelStats.IsValid = falseを

Invalid ModelState

私ItemViewModelは次のとおりです。

public class ItemViewModel 
    { 
    public int ItemId { get; set; } 
    [Display(Name = "Item")] 
    public string ItemName { get; set; } 
    [Display(Name = "Description")] 
    public string Description { get; set; } 
    [Display(Name = "Price")] 
    public double UnitPrice { get; set; } 
    [Range(0.00, 100, ErrorMessage = "VAT must be a % between 0 and 100")] 
    public decimal VAT { get; set; } 
    [Required] 
    public string UserName { get; set; } 
    } 

私はそれが何か単純なものになると確信しています - しかし、私はちょうどそれを見てきただけで、私は間違って何をしているのか分かりません。誰でも助言してもらえますか?

ありがとう、マーク

+1

ViewModelの検証は 'UserName'プロパティを設定する前です。だから、それはヌルであり、検証は失敗します。とにかくViewModelに必要なユーザ名が必要なのはなぜですか? – Zabavsky

答えて

11

妥当性検査の失敗に関する限り、

フォームでUserNameを供給されていない場合は、マップを作成し、AutoMapper

ファーストを使用するためにItemViewModel

から[必須]を削除し、そのよう

Mapper.CreateMap<Item, ItemViewModel>(); 

などと次に地図

var itemModel = Mapper.Map<Item, ItemViewModel>(model); 

参照:AutoMapperはどのように使用しますか?セクション内https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

+0

こんにちは - ありがとう - それは検証していないModelStateです - だからマッパーまでは届かない。あなたは何かが間違って見ることができますか?ありがとうございます、Mark – Mark

+0

@fixit、 'ModelState'が有効でない場合、失敗した検証をしました。' ModelState'は* AutoMapper *とは何の関係もありません。 – Satpal

+0

@fixit、 'UserName'をフォームに指定していますか?そうでない場合は、viewModelから '[Required]'を削除してください – Satpal

1

ItemViewModelItemクラスが同じフィールドを持つかどうかを確認してください。同じDatatypes AutoMapperを持つ同じフィールドが正常に動作する場合。

Mapper.CreateMap< Item, ItemViewModel>(); 

Mapper.Map< Item, ItemViewModel>(ItemVM); 

フィールドが両方のクラスで同じでない場合は、カスタムマッピングと同じであることを確認してください。上記のカスタムマッピングFullname

Mapper.CreateMap<UserDM, UserVM>().ForMember(emp => emp.Fullname, 
map => map.MapFrom(p => p.FirstName + " " + p.LastName)); 

(ここでUserDMUserVMビューモデルで、ドメインモデルである)FirstNameにマッピングしUserVMフィールド、UserDMからLastName分野です。

関連する問題