2017-07-07 12 views
2

私はこの質問が何回も尋ねられていることを知っていますが、これは異なっています。私のjsonオブジェクトがコントローラの機能に到達するとnullになる

私は剣道のgrdiを選択し、選択されていないタイプを選択している、ユーザーは自由な役割を変更して動作している。私はこのようなex31を試しましたExample1Example2他多くの。

問題はコントローラに渡そうとしている私のjsonオブジェクトがnullになったことです。これは私が以下で試したものです。

何か間違っていると私を修正してもらえますか?

JsonObj Javascriptを:これは私がグリッドチェックボックス

[ { mailID: '10' , roleID: '5' , isMailSelected: 'false' } , { 
    mailID: '11' , roleID: '5' , isMailSelected: 'false' } , { 
mailID: '19' , roleID: '9' , isMailSelected: 'false' } ] 





function goToControllerSave() { 
    var jsonObj = displayFilterResults(); 
    $.ajax({ 

     url: '@Url.Action("Save", "Account")', 
     type: "POST", 
     dataType: "json", 
     traditional: true, 
     data: { myobj: jsonObj }, 
     success: function (data) { 

     }, 
     error: function (data) { 

     } 
    }) 

} 


$(function() { 
    $('#Grid1').on('click', '.chkbx', function() { 
     var checked = $(this).is(':checked'); 
     var grid = $('#Grid1').data().kendoGrid; 
     var dataItem = grid.dataItem($(this).closest('tr')); 
     dataItem.set('isSelected', checked); 
    }) 
}) 


//My json obj: this returns results on Alert 

function displayFilterResults() { 
    var items = "["; 
    var dataSource = $("#Grid1").data("kendoGrid").dataSource; 
    var filters = dataSource.filter(); 
    var allData = dataSource.data(); 
    var query = new kendo.data.Query(allData); 
    var filteredData = query.filter(filters).data; 

    items = items + " { mailID: '" + item.mailID + "' , roleID: '" + 
    item.roleID + "' , isSelected: '" + item.isSelected + "' } ,"; 

    }); 
    if (items.charAt(items.length - 1) == ',') { 
     items = items.substr(0, items.length - 1); 
    } 
    items = items + "]"; 

    alert(items) 
    return items; 
} 

マイconntrollerあなたが言及する例で

public class myItems 
    { 

     public string mailID { set; get; } 
     public string roleID { set; get; } 
     public string isSelected { set; get; } 
    } 

    [HttpPost] 
    public ActionResult Save(List<myItems> myobj) 
    { 
     -------------- 
     -------------- 
    } 
+0

あなたののcontrolerメソッドは、配列を期待掲載同じを持っています。おそらく 'data:{myobj:jsonObj}'を 'data:jsonObj'に変更すると役に立ちます。 – NtFreX

+0

@NtFreX私はすでにそれを試して、それでもnullを渡します –

+0

JavaScriptからコントローラに渡すものはstringです。最初にオブジェクト配列を作成し、JSON.stringifyを使用してJSON文字列をコントローラに送信する必要があります。 –

答えて

1

から解除したときに、私が得るものである、JSONオブジェクトは、実際のオブジェクトであります、文字列表現ではありません。その後、JSON.stringify()は、二重引用符を使用してフォーマットされた文字列を取得したり、スペアスペースを削除するために使用されます。残念ながら、MVCアプリケーションではこのように見えないjsonの解析に問題があります。

文字列を直接作成するので、同様のjson形式を生成する必要があります。私はメンバーの名前を更新したクラスで

var json = '{"myobj":['; 
json +='{mailID:"10",roleID:"5",isMailSelected:"false"},'; 
json+='{mailID:"11",roleID:"5",isMailSelected:"false"},'; 
json +='{mailID:"19",roleID:"9",isMailSelected:"false"}' 
json +=']}'; 
$.ajax({ 
    url: '@Url.Action("Save", "Account")', 
    type: "POST", 
    contentType: "application/json", 
    dataType: 'html', 
    data: json, 
    success: function (data) { 

    }, 
    error: function (data) { 
    } 
}) 

私はそれがJSONと一致しませんでしたし、私はあなたがisMailSelectedにそれを変更すると仮定しました原因、をisSelected。私のコントローラで

public class myItems 
{ 
    public string mailID { set; get; } 
    public string roleID { set; get; } 
    public string isMailSelected { set; get; } 
} 

私はあなたが

[HttpPost] 
public ActionResult Save(List<myItems> myobj) 
{ 
    return View(); 
} 
+0

これは正しいフォーマットを取得した後に動作するように見えます。名前は質問にあることを意味します。どのように私はそれを得ることができますか? { "アイテム":[ { "MAILID":+ item.mailID +、 "roleID":+ item.roleID +、 "isMailSelected" は: }、{ "MAILID" をitem.isSelected :+ item.mailID +、 "roleID":+ item.roleID +、 "isMailSelectedは":私はあなたが単純にJSONオブジェクトを作成し、にアイテムをプッシュする場合、コードが良いだろうと信じて } ] } –

+0

をitem.isSelected文字列を連結するのではなく、配列を返します。 – derloopkat

+0

あなたが言うことを理解しようとしていません –

関連する問題