2016-07-28 110 views
0

我正在爲將對象的列表傳遞給來自視圖的C#代碼而苦苦掙扎。如果我傳遞一個簡單的字符串,它工作正常。但它不適用於List。所以我相信我在這裏錯過了一些東西。使用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 
} 

在調試我可以看到,@測試變量得到填充myObject的名單。但是當我到達代碼端時,它總是空的。

請讓我知道如果我在這裏失蹤的東西。另外告訴我是否需要更多信息。

+0

請注意,模型 - 視圖 - 控制器標籤是關於模式的問題。 ASP.NET-MVC實現有一個特定的標籤。 –

回答

2

您正在將C#對象傳遞給Javascript函數。它不知道如何閱讀。你應該序列化JSON將通過它之前。

如果使用Json.NET可以通過

ViewBag.ObjectsList = JsonConvert.SerializeObject(yourlist); 

做,那麼你可以繼續你。

一些注意事項:

你應該嘗試開始使用的,而不是把事情在ViewBag的ViewModels。在Javascript方面,你應該綁定事件處理程序,例如點擊而不是使用onclick,因爲這會使你的代碼更易於管理和重用。

+0

我是MVC的新手,我正在編輯現有的代碼。另外,即使我不喜歡將東西添加到ViewBag。如果我將它添加到模型中,我還需要使用Json.NET嗎? – Newbee

+1

@Newbee最終是的。在Javascript中使用它之前,您需要將它序列化爲Json。取決於您的需求,您在哪裏以及如何做到這一點取決於您。 –

+0

我終於設法對此進行排序。不過,我正在使用'JavaScriptSerializer'。感謝幫助。而不是傳遞整個對象列表,我將其分解爲一個帶有必要數據的「Dictionary」並序列化該變量。 – Newbee

相關問題