2016-07-28 7 views
0

オブジェクトのリストをC#コードに渡して少し苦労しています。私は単純な文字列を渡す場合、それは正常に動作します。それはリストのために働いていません。だから私はここで何かが欠けていると確信しています。HttpPostを使用してViewからコントローラへのオブジェクトのリストを渡します

ビュー

<div class="row control-actions"> 
@{ 
    List<MyObject> test = ViewBag.ObjectsList; 
    <button type="button" class="btn btn-primary btn-wide" onclick="addAllObjectsToExp('@test')">Add All</button> 
      } 
</div> 

<script type="text/javascript"> 

function addAllObjectsToExp(objList) { 
    $.post('@Url.Action("AddAllObjectsToExp", "ExportObjects")', { objectsList: objList}, 
    function (result) { 
     $('#numbers').html(result); 
    }); 
} 
</script> 

コード

[HttpPost] 
[OutputCache(Location = System.Web.UI.OutputCacheLocation.None, NoStore = false, Duration = 0)] 
public int AddAllObjectsToExp(List<MyObject> objectsList) 
{ 
    foreach(MyObject obj in objectList) 
    { 
     //Do something here 
    } 

    //and return an integer 
} 

私は@Test変数はMyObjectにのリストで埋めなっていることがわかりますデバッグ中。しかし、コード側に到達すると常にnullになります。

ここに何か不足している場合は教えてください。さらに情報が必要な場合は教えてください。

+0

model-view-controllerタグは、パターンに関する質問用です。 ASP.NET-MVCの実装には特定のタグがあります。 –

答えて

2

C#オブジェクトをJavascript関数に渡しています。それを読む方法はわかりません。あなたはそれを渡す前に、JSONにそれをシリアル化する必要がある。

あなたは次にあなたがあったように継続することができますが、

ViewBag.ObjectsList = JsonConvert.SerializeObject(yourlist); 

でそれを行うことができますJson.NET使用している場合。

いくつかの注意:

あなたが代わりにViewBagで物事を置くことのviewmodelsを使用して起動してみてください。 Javascript側では、onclickを使用する代わりに、イベントハンドラをクリックするなどのイベントハンドラをバインドする必要があります。コードをはるかに扱いやすく再利用できるようにするためです。

+0

私はMVCを初めて使い、既存のコードを編集しています。また、私はViewBagに物を追加するのは好きではありません。モデルに追加するとJson.NETを使用する必要がありますか? – Newbee

+1

@Newbee最終的にはい。 Javascriptで使用する前に、Jsonにシリアル化する必要があります。どこで、どのようにあなたのニーズに応じてあなた次第です。 –

+0

私はついにこれを分類することができました。私は 'JavaScriptSerializer'を使用しています。手伝ってくれてありがとう。オブジェクトリスト全体を渡すのではなく、必要なデータとその変数を直列化した 'Dictionary'に分割します。 – Newbee

関連する問題