2017-09-07 3 views
-1

としてコントローラに渡されていない私の見解ではデータは、私はクラスとても似ていたオブジェクト

public ActionResult EditItem(EditItem item) 
{ 
    var im = new ItemManager(); 
    return Json(im.EditItem(item)); 
} 

、私のようなAjaxのポストで、このスクリプトを持っていますso:

function EditItem(obj) { 
    this.ItemId = obj.ItemId; 
    this.ItemName = obj.ItemName; 
    this.SerialNumber = obj.SerialNumber; 
    this.BrandName = obj.BrandName; 
    this.Quantity = obj.Quantity; 
    this.Description = obj.Description; 
    this.UserAccountId = obj.UserAccountId; 
} 

$('#tbl_items').on('click', '.btn_edit', function() { 
var $tr = $(this).closest('tr'); 

var itemid = $tr.find('td[data-itemid]').data('itemid'); 
var itemname = $tr.find('td[data-itemname]').data('itemname'); 
var serialnumber = $tr.find('td[data-serialnumber]').data('serialnumber'); 
var brandname = $tr.find('td[data-brandname]').data('brandname'); 
var quantity = $tr.find('td[data-quantity]').data('quantity'); 
var description = $tr.find('td[data-description]').data('description'); 

var obj = {}; 
obj.ItemId = itemid; 
obj.ItemName = itemname; 
obj.SerialNumber = serialnumber; 
obj.BrandName = brandname; 
obj.Quantity = quantity; 
obj.Description = description; 
obj.UserAccountId = 0; 

edit_item(obj); 
}); 

function edit_item(data) { 
    $.ajax({ 
     type: 'POST', 
     url: '@Url.Action("EditItem", "Item")', 
     data: { item: JSON.stringify(data) }, <===== This is not passed to the controller 
     success: function(result) { 
      alert("saved); 
      } else { 
       alert("false"); 
      } 
     } 
    });  
} 

私のコントローラで私のdata: { item: JSON.stringify(data) }が受け入れられないのはなぜですか?

{"ItemId":4、 "ItemName": "ghjk"、 "SerialNumber": "ghjk"、 "BrandName": "ghk"、 "Quantity"これは私がconsole.log() :4、 "Description": "hdfh"、 "UserAccountId":0}

名前はすべてモデルと同じですが、コントローラーはそれを受け入れません。私は実際に手動でコントローラに差分値を受け取らせることができますが、オブジェクトとして送信したいと思います。

+0

ちょうど 'data:data、 ' –

+0

コントローラのEditItemアクションに動詞[HttpPost]が必要です。また、ajaxポストの場合は、ヘッダーのcontent-typeをapplication/jsonにする必要があります – Shahbaz

+0

ありがとうスティーブン。 – Ibanez1700

答えて

1

それはアイテム

という名前のプロパティを別のオブジェクトを必要とせず、また、それはJSONを文字列化する必要はありませんdata: data

として

data: { item: JSON.stringify(data) } 

を渡してください。オブジェクトを直接渡すことができます。

+0

これは機能しません - そのちょうど 'data:data' - no' JSON.stringify() '! –

+0

My Bad !! JSON.stringify()は機能しません。後の読者が混乱しないように私の答えを更新する。ありがとうスティーブン – Shahbaz

関連する問題