我正在努力将对象列表从视图传递给C#代码。如果我传递一个简单的字符串,它工作正常。但它不适用于List。所以我相信我在这里遗漏了一些东西。
查看
<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列表。但是当我到达代码端时,它总是为空。
如果我在这里遗漏了什么,请告诉我。如果需要更多信息,请告诉我。
答案 0 :(得分:2)
您正在将C#对象传递给Javascript函数。它不知道如何阅读。在传入之前,您应该将其序列化为JSON。
如果你使用Json.NET,你可以通过
来完成ViewBag.ObjectsList = JsonConvert.SerializeObject(yourlist);
然后你可以像往常一样继续。
有些说明:
您应该尝试开始使用ViewModels而不是将内容放入ViewBag中。在Javascript方面,您应该绑定事件处理程序,例如点击而不是使用onclick
,因为它会使您的代码更易于管理和重用。