2013-05-10 9 views
5

में ऑटोमैपर का उपयोग करने का सही तरीका मैं ViewModels का उपयोग करके टार्ट करने की कोशिश कर रहा हूं - लेकिन मुझे इस पोस्ट के साथ समस्या नहीं है - कोड के नीचे वॉच भाग में मॉडल में मान दिखाए गए हैं:ASP.Net MVC

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 में एक आवश्यक उपयोगकर्ता नाम की आवश्यकता क्यों है? – Zabavsky

उत्तर

11

जहां तक ​​सत्यापन विफलता का संबंध है।

आप रूप में UserName की आपूर्ति नहीं कर रहे हैं, तो हटाने [आवश्यक] से ItemViewModel

आदेश AutoMapper का उपयोग करने के

सबसे पहले, एक नक्शा, बनाएं

Mapper.CreateMap<Item, ItemViewModel>(); 

जैसे और फिर मानचित्र

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

संदर्भ: मैं ऑटोमैपर का उपयोग कैसे करूं? अनुभाग https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

+0

हाय - धन्यवाद - यह मॉडलस्टेट है जो मान्य नहीं है - इसलिए मैपर तक नहीं पहुंच रहा है। क्या आप इसके साथ कुछ गलत देख सकते हैं? धन्यवाद, मार्क – Mark

+0

@ फ़िक्सिट, यदि 'मॉडलस्टेट' मान्य नहीं है तो आपने कुछ सत्यापन किया है जो असफल हो रहे हैं, 'मॉडलस्टेट' के पास * ऑटोमैपर * – Satpal

+0

@ फ़िक्सिट के साथ कुछ लेना देना नहीं है, क्या आप फ़ॉर्म में 'उपयोगकर्ता नाम' की आपूर्ति कर रहे हैं? यदि नहीं, तो दृश्य से '[आवश्यक]' हटाएं मॉडल – Satpal

1

सुनिश्चित करें कि आपका ItemViewModel, Item कक्षाओं में समान फ़ील्ड हैं या नहीं। यदि एक ही डेटाटाइप ऑटोमैपर के साथ समान फ़ील्ड ठीक काम करता है।

Mapper.CreateMap< Item, ItemViewModel>(); 

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

यदि दोनों कक्षाओं में फ़ील्ड समान नहीं हैं तो कस्टम मैपिंग के साथ यह सुनिश्चित करें।

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

ऊपर कस्टम मानचित्रण Fullname में UserVM क्षेत्र है कि FirstName, UserDM से LastName क्षेत्रों के साथ नक्शे (यहाँ UserDM डोमेन मॉडल है, UserVM देखें मॉडल है)।