2012-01-09 5 views
6

Sono nuovo a eliminazione diretta e sto avendo difficoltà a cercare di recuperare i miei dati da Knockout sul mio server. Continuo a ricevere un errore di "Nessun costruttore senza parametri definito per questo oggetto". Qualsiasi aiuto sarebbe apprezzato.Invio dei dati del modello da Knockout back a MVC 3

Il mio modello Knockout è la seguente

 function partSummary(item) { 
      var self = this; 
      self.ID = ko.observable(item.ID); 
      self.serialNumber = ko.observable(item.SerialNumber); 
      self.description = ko.observable(item.Description); 
      self.manufacturer = ko.observable(item.Manufacturer); 
      self.creationDate = ko.observable(item.DateCreated); 
      self.active = ko.observable(item.IsActive); 
     } 

Il mio codice per inviare i dati indietro il server è

self.savePart = function() { 
       $.ajax("/PartKO/UpdatePart", { 
        data: ko.toJSON(self.partDetails), 
        type: "post", 
        contentType: 'application/json', 
        dataType: 'json' 
       }); 
      }; 

mio regolatore di MVC è

[HttpPost] 
    public JsonResult UpdatePart(PartDetail part) 
    { 
     var dbPart = new PartGenericAccessor(); 
     dbPart.ID = part.ID; 
     dbPart.Load(); 
     dbPart.Description = part.Description; 
     dbPart.IsActive = Convert.ToBoolean(part.IsActive); 

     var manufacturers = ManufacturerAccessor.LoadAll<ManufacturerAccessor>(); 
     if (part.Manufacturer != null) 
     { 
      var manufacturer = (from p in manufacturers where p.Name == part.Manufacturer select p.ID).First(); 
      dbPart.ManufacturerID = manufacturer; 
     } 

     dbPart.Save(); 

     return Json("Success!!"); 
    } 

E il mio modello lato server è

public class PartDetail 
{ 
    public PartDetail(Guid id, string serial, string description, string manufacturer, DateTime created, bool isActive) 
    { 
     ID = id; 
     SerialNumber = serial; 
     Description = description; 
     Manufacturer = manufacturer; 
     DateCreated = created.ToShortDateString(); 
     IsActive = isActive.ToString(CultureInfo.InvariantCulture); 

    } 

    public Guid ID { get; set; } 

    public string SerialNumber { get; set; } 

    public string Description { get; set; } 

    public string Manufacturer { get; set; } 

    public string DateCreated { get; set; } 

    public string IsActive { get; set; } 
} 

risposta

5

è necessario fornire un costruttore senza parametri per il modello MVC:

public class PartDetail 
{ 
    public PartDetail() 
    { ... } 
} 

Quando i dati provengono dal server, MVC creerà un oggetto vuoto, utilizzando il costruttore senza parametri e quindi chiamare il 'set' metodi per impostare ogni proprietà che corrisponde ai dati in arrivo

+0

Ero così concentrato sul lato javascript che mi manca una cosa facile con un ben definito messaggio di errore sul lato C# Grazie dell'aiuto – PlTaylor

+0

Sapevo solo la risposta di aver commesso lo stesso errore! ;-) –

0

Una volta ho fatto errore stupido:.

regolatore Chiamato argomento 'azione' - e su post-it allways nulla.

[HttpPost] 
public JsonResult AddMetaAction(ActionModel action) 

Non sapevo di questo e spendo il debug e risolvere quel problema circa la metà di un'ora :(

Problemi correlati