2012-01-09 1 views
6

ノックアウトに新しく、ノックアウトから自分のサーバーに自分のデータを戻そうとして苦労しています。私は 'このオブジェクトのために定義されたパラメータのないコンストラクタはありません。どんな助けもありがとう。モデルデータをノックアウトからMVC 3に送り返す

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

データを送信するために私のコードは、サーバーが

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

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

そして、私のサーバー側のモデルであるバック次のように私のノックアウトモデルがありますis

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

答えて

5

あなたのMVCモデルのパラメータなしのコンストラクタを提供する必要があります。データがサーバから戻ってきたとき

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

、MVCは、パラメータなしのコンストラクタを使用して、空のオブジェクトを作成し、その後、「設定」と呼びます入ってくるデータに一致する各プロパティを設定する方法

+0

の約半分という問題を解決しませんでしたエラーメッセージがC#側にあります。ありがとうございました – PlTaylor

+0

私は自分自身で同じミスをしてしまったことから答えを知っていました!;-) –

0

私は愚かな間違い作ったら:

コントローラ引数「アクション」という名前

- とポストにそれオールウェイズヌルを。

[HttpPost] 
public JsonResult AddMetaAction(ActionModel action) 

私はそれについて知っていて、デバッグに費やす時間と:(私はので、私は明確に定義されて簡単なことを見逃してはJavaScript側で濃縮した

関連する問題