2013-05-10 6 views
5

Sto provando ad usare ViewModels - ma sto avendo problemi con questo POST che non convalida - i valori nel modello sono mostrati nella parte Watch sotto il codice:Modo corretto per utilizzare AutoMapper in ASP.Net MVC

ModelStats.IsValid = false

Invalid ModelState

mio 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; } 
    } 

Sono sicuro che sarà qualcosa di semplice - ma l'ho guardato da così tanto tempo, non riesco a capire cosa sto sbagliando. Qualcuno può consigliare?

Grazie, Mark

+1

La convalida di ViewModel è prima di impostare la proprietà 'UserName', quindi, suppongo, sia null e la convalida non sia riuscita. Perché hai bisogno di un nome utente richiesto nel tuo ViewModel? – Zabavsky

risposta

11

Per quanto riguarda la mancata convalida è interessato.

Se non stanno fornendo UserName in forma, quindi rimuovere [Required] dal ItemViewModel

Per poter utilizzare automapper

In primo luogo, creare una mappa, come ad esempio

Mapper.CreateMap<Item, ItemViewModel>(); 

E quindi mappa

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

Riferimento: Come si usa AutoMapper? sezione in https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

+0

Ciao - grazie - è il ModelState che non convalida - quindi non arrivare fino al mappatore. Riesci a vedere qualcosa di sbagliato in questo? Grazie, Mark – Mark

+0

@fixit, Se 'ModelState' non è valido allora hai messo qualche convalida che non funziona,' ModelState' non ha nulla a che fare con * AutoMapper * – Satpal

+0

@fixit, stai fornendo 'UserName' nel modulo? In caso contrario, rimuovere '[Required]' da viewModel – Satpal

1

Assicurarsi che le vostre classi ItemViewModel, Item abbiano gli stessi campi o meno. Se gli stessi campi con gli stessi Datatypes AutoMapper funzionano correttamente.

Mapper.CreateMap< Item, ItemViewModel>(); 

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

Se i campi non sono uguali in entrambe le classi, accertarsi che sia lo stesso con Mapping personalizzato.

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

Nella mappatura personalizzata sopra Fullname è UserVM campo che mappa con FirstName, LastName campi da UserDM (qui UserDM è Domain Model, UserVM è vista Model).