2012-01-09 10 views
6

Jestem nowy w nokautowaniu i ciężko mi próbuje odzyskać dane z Knockout na mój serwer. Ciągle pojawia się błąd "Brak konstruktora bez parametrów dla tego obiektu". Każda pomoc będzie doceniona.Wysyłanie danych modelu z Knockout z powrotem do MVC 3

Mój model Knockout jest następujący

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

mój kod, aby wysłać dane z powrotem serwer jest

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

Mój kontroler MVC jest

[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!!"); 
    } 

A mój model po stronie serwera to

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

Odpowiedz

5

Trzeba podać konstruktora bez parametrów dla danego modelu MVC:

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

Jeżeli dane pochodzą z serwera, MVC tworzy pusty obiekt, używając konstruktora bez parametrów, a następnie wywołać „set” metody, aby ustawić każdą nieruchomość, która pasuje do danych pochodzących w

+0

Byłem tak skoncentrowany na stronie javascript, że przegap rzeczą łatwą z dobrze zdefiniowane komunikat o błędzie po stronie C# Dzięki za pomoc – PlTaylor

+0

Znałem tylko odpowiedź od samego popełnienia tego błędu ;-) –

0

Raz zrobiłem głupi błąd.

Nazwany kontroler argumentem „działanie” - i po to zawsze dobrze zerowy.

[HttpPost] 
public JsonResult AddMetaAction(ActionModel action) 

Nie wiedziałem o tym i wydać na debugowania i rozwiązywania tego problemu około pół godziny :(

Powiązane problemy