2012-01-09 9 views
6

Soy nuevo en el golpe de gracia y estoy teniendo dificultades para tratar de recuperar mis datos de Knockout en mi servidor. Sigo recibiendo un error de 'Ningún constructor sin parámetros definido para este objeto'. Cualquier ayuda sería apreciada.Enviar los datos del modelo de Knockout a MVC 3

Mi modelo Knockout es el siguiente

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

Mi código para enviar copias de los datos que el servidor es

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

Mi controlador MVC es

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

Y mi modelo del lado del servidor es

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

Respuesta

5

es necesario proporcionar un constructor sin parámetros para su modelo MVC:

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

Cuando los datos regresa desde el servidor, MVC creará un objeto vacío, utilizando el constructor sin parámetros y luego llamar al 'conjunto' métodos para establecer cada propiedad que coincide con los datos que entran

+0

Estaba tan concentrado en el lado javascript que echo de menos una cosa fácil con un bien definido mensaje de error en el lado C#. Gracias por la ayuda. – PlTaylor

+0

¡Solo sabía la respuesta de cometer el mismo error yo mismo! ;-) –

0

Una vez hice estúpido error:.

controlador llamado argumento de 'acción' - y en post Allways nula.

[HttpPost] 
public JsonResult AddMetaAction(ActionModel action) 

Yo no sabía nada de eso y paso en la depuración y la solución de ese problema de una media hora de :(

Cuestiones relacionadas