2013-05-10 12 views
5

Ich versuche mit ViewModels tart - aber ich habe Probleme mit diesem POST nicht validieren - die Werte im Modell werden im Watch-Teil unter dem Code angezeigt:Korrekter Weg zur Verwendung von AutoMapper in ASP.Net MVC

ModelStats.IsValid = false

Invalid ModelState

Mein ItemViewModel ist:

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

Ich bin mir sicher, dass es etwas Einfaches sein wird - aber ich habe es mir so lange angesehen, ich kann nicht herausfinden, was ich falsch mache. Kann jemand bitte beraten?

Danke, Mark

+1

Die Validierung des ViewModel ist bevor Sie die Eigenschaft 'UserName' setzen, also denke ich, es ist null und die Validierung schlägt fehl. Warum benötigen Sie in Ihrem ViewModel einen erforderlichen Benutzernamen? – Zabavsky

Antwort

11

Soweit Prüfungsfehler betroffen ist.

Wenn Sie nicht UserName in Form liefert, dann entfernen [Erforderlich] von ItemViewModel

Um AutoMapper zu verwenden

Erstellen Sie zunächst eine Karte, wie

Mapper.CreateMap<Item, ItemViewModel>(); 

Und dann Karte

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

Siehe: Wie verwende ich AutoMapper? Abschnitt in https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

+0

Hallo - danke - es ist der ModelState, der nicht validiert - also nicht so weit wie der Mapper. Kannst du etwas falsch sehen? Danke, Mark – Mark

+0

@fixit, Wenn 'ModelState' nicht gültig ist dann haben Sie einige Validierung, die fehlschlagen,' ModelState' hat nichts mit * AutoMapper * – Satpal

+0

@fixit, liefern Sie 'UserName' in das Formular? Wenn nicht, entferne '[Erforderlich]' aus viewModel – Satpal

1

Stellen Sie sicher, dass Ihre Klassen ItemViewModel, Item gleiche Felder haben oder nicht. Wenn gleiche Felder mit gleichen Datentypen AutoMapper funktioniert gut.

Mapper.CreateMap< Item, ItemViewModel>(); 

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

Wenn Felder in beiden Klassen nicht identisch sind, stellen Sie dies mit Custom Mapping sicher.

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

In der oben getroffene Zuordnung Fullname ist UserVM Feld, das mit FirstName abbildet, LastName Felder aus UserDM (hier UserDM ist Domain Model, UserVM ist Ansicht Modell).

Verwandte Themen