2017-02-02 5 views
0

問題が残っています。私は私のコントローラから観測可能な値にアクセスしようとしています。データはJSONオブジェクトに格納されます。コントローラーからアクセスする最も良い方法は何ですか?コントローラMVCでKnockoutJSにアクセスできません

var urlPath = window.location.pathname; 

    var CreateSalesVM = { 
    Image :ko.observable({ 
    base64StringArray: ko.observableArray() 
}), 

btnCreateSales: function() { 

    console.log("Ko is ", ko.toJSON(this)); 
    $.ajax({ 
     url: urlPath, 
     type: 'post', 
     dataType: 'json', 
     data: ko.toJSON(this), 
     contentType: 'application/json', 
     success: function (result) { 
      console.log("This was a success"); 
      // window.location.href = urlPath + '/'; 
      alert(ko.toJSON(this)); 
      console.log("Ko is ", ko.toJSON(this)); 
     }, 
     error: function (err) { 

      console.log("Ko is ", ko.toJSON(this)); 
      if (err.responseText == "success") 
      { 
       console.log("This was an error success", urlPath); 

       // window.location.href = urlPath + ''; 
      } 
      else { 
       alert(err.responseText); 
       // console.log("This was an error ", urlHostPath); 
      } 
     }, 
     complete: function() { 

     } 
    }); 
} 

}; 
    ko.applyBindings(CreateSalesVM); 

これは、ここで

public ActionResult Create() 
    { 
     return View(); 
    } 

    // POST: Sales/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 

    public string Create(SALE_ITEMS sALE_ITEMS) 
    { 
     //used for testing since image won't come over 
     byte[] test = Encoding.ASCII.GetBytes("1232434234"); 


     try 
     { 
      var sALE_ITEM_IMAGES = new SALES_ITEM_IMAGES(); 



      Debug.Write("SALES DATA is", sALE_ITEMS); 
      db.SALE_ITEMS.Add(sALE_ITEMS); 
      db.SaveChanges(); 

      // Getting id from primary to store record in foreign 
      decimal newID = sALE_ITEMS.SALE_ID; 


      Debug.Write("SALES DATA is", newID.ToString()); 

      sALE_ITEM_IMAGES.SALE_ITEM_ID = newID; 

      //This is where I need to grab the base64 and store it inside sALE_ITEM_IMAGES.IMAGE 
      sALE_ITEM_IMAGES.IMAGE = sALE_ITEMS.IMAGE; 

      // Do whatever you need to here 
      db.SALES_ITEM_IMAGES.Add(sALE_ITEM_IMAGES); 
      db.SaveChanges(); 

     } 
     catch (DbEntityValidationException ex) 
     { 
      string errorMessages = string.Join("; ", ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.PropertyName + ": " + x.ErrorMessage)); 
      Debug.Write(errorMessages); 

     } 
     return "success"; 
    } 

は私のモデルであり、コントローラである。これは私のVMれる

public partial class SALE_ITEMS 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public SALE_ITEMS() 
    { 
     this.SALES_ITEM_IMAGES = new HashSet<SALES_ITEM_IMAGES>(); 
    } 

    public decimal SALE_ID { get; set; } 
    public string USERID { get; set; } 
    public string NAME { get; set; } 
    public string PHONE { get; set; } 
    public string EMAIL { get; set; } 
    public string ITEM { get; set; } 
    public string DESCRIPTION { get; set; } 
    public string ADMIN_APPROVAL { get; set; } 
    public Nullable<System.DateTime> CREATED_AT { get; set; } 
    public Nullable<System.DateTime> UPDATED_AT { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<SALES_ITEM_IMAGES> SALES_ITEM_IMAGES { get; set; } 
} 
} 

public partial class SALES_ITEM_IMAGES 
{ 
    public decimal ID { get; set; } 
    public decimal SALE_ITEM_ID { get; set; } 
    public byte[] IMAGE { get; set; } 
    public Nullable<System.DateTime> CREATED_AT { get; set; } 

    public virtual SALE_ITEMS SALE_ITEMS { get; set; } 
} 

もう一度、私がしようとしているのは、私のコントローラからbase64 IMAGEバインドにアクセスすることだけです。

+0

を試してみてください、あなたのコードを修正? – Jag

+0

それは問題です。SA​​LE_ITEMSの子テーブルであるSALES_IMAGE_ITEMSにアクセスする必要があります。 – Dwill

+0

あなたのモデルクラスによると、それぞれの 'SALE_ITEM'は複数の' SALES_ITEM_IMAGES'を持つことができるので、画像をループして 'db.SALES_ITEM_IMAGES.Add(sALE_ITEM.SALES_ITEM_IMAGE);を実行することはできません; – Jag

答えて

0

クライアントのビューモデルCreateSalesVMは、サーバーサイドモデルと同じプロパティ名と一致する必要があります。

私はそこ `SALE_ITEMS`モデルには` IMAGE`プロパティがありませんので、どのようにあなたがsALE_ITEMS.IMAGE` `からアクセスすることができ、この

// client side 
var urlPath = window.location.pathname; 
var CreateSalesVM = { 
    SALES_ITEM_IMAGES: ko.observableArray([{ //same as ICollection at server side 
    IMAGE: ko.observableArray([]) // same as byte[] at server side 
    }]), 
    btnCreateSales: function() { 
    var data = ko.toJSON(this); 
    console.log("Ko is ", data); 
    $.ajax({ 
     url: urlPath, 
     type: 'post', 
     dataType: 'json', 
     data: data, 
     contentType: 'application/json', 
     success: function(result) { 
     console.log("This was a success"); 
     // window.location.href = urlPath + '/'; 
     console.log(result); 
     }, 
     error: function(err) { 
     console.log("Ko is ", data); 
     if (err.responseText == "success") { 
      console.log("This was an error success", urlPath); 
      // window.location.href = urlPath + ''; 
     } else { 
      alert(err.responseText); 
      // console.log("This was an error ", urlHostPath); 
     } 
     }, 
     complete: function() {} 
    }); 
    } 

}; 
ko.applyBindings(CreateSalesVM); 

// server side 
[HttpPost] 
public string Create(SALE_ITEMS item) 
{ 
    try 
    { 
    Debug.Write("SALES DATA is", item); 

    db.SALE_ITEMS.Add(item); 
    db.SaveChanges(); 

    // Getting id from primary to store record in foreign 
    decimal newID = item.SALE_ID; 
    Debug.Write("SALES DATA is", newID.ToString()); 

    // loop Images 
    foreach (var image in item.SALE_ITEM_IMAGES) 
    { 
     image.SALE_ITEM_ID = newID; 

     // Do whatever you need to here 
     db.SALES_ITEM_IMAGES.Add(image); 
     db.SaveChanges(); 
    } 

    } 
    catch (DbEntityValidationException ex) 
    { 
    string errorMessages = string.Join("; ", ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.PropertyName + ": " + x.ErrorMessage)); 
    Debug.Write(errorMessages); 
    } 
    return "success"; 
} 
+0

推奨される変更では、SALES_ITEM_IMAGESはまだNULLです。 – Dwill

関連する問題