将 Javascript 中的 DataTable 对象传递给控制器

Passing a DataTable object in Javascript to controller

我在一个 *.aspx 页面中调用了一个 javascript 函数(在别处定义),该函数接受一个 object 作为参数...

myPage.aspx

<script type="text/javascript">
    BuildTable("Results/TableList/", "TableTitle",  {<%: Model.DataTable%>});
    refreshTable(sortTable["tbl-div_id"]);
</script>

scripts.js

//global
var sortTable = {};

function BuildTable(url, title, args)
{
   var myTable = new Object();
   myTable.postBackUrl = url;
   myTable.Title = title;
   myTable.args = (args != undefined) ? args : new Object();
   sortTable[<index>] = myTable;
 }

 function sortTable(selectedTable)
 {
    $.ajax({
        url: selectedtable.postBackUrl,
        data: selectedtable.args,
        sucess: function.....
        });
  }

postBackUrl - 在控制器中

[Authorize]
 public ActionResult TableList,<params>, DataTable values)
 {
     ...
     //`values` comes back a new object, there are no colmns defined, 
 }

我可以在 myPage.aspx 中看到为 <%:Model.DataTable%> 定义的列和行,但是当我进入 javascript 调试器时,我无法识别该对象。

问题

如何确保 aspx 页面将整个 DataTable 对象发送到 javascript 并将 javascript 发送回服务器控制器,以便我随后可以操作值?

更新

如果有一种方法可以从视图直接转到控制器,我也愿意接受

首先,<%:Model.DataTable%> 上有一个拼写错误,应该是 <%=Model.DataTable%> 看看是否有帮助,否则你可以做的是将该对象作为隐藏元素放入可能是带有ID 并在 javascript document.getElementById(id of your hidden Input) 的帮助下传递该元素对象,看看是否有帮助。

我最终使用了 Session[] 变量。

myPage.aspx

 <%
    Session["myTable"] = Model.DataTable;
 %>

postBackUrl - 在控制器中

 DataTable table = (DataTable)HttpContext.Session["myTable"];

此时,table 现在具有模型的值,我不必在 javascript

中处理复杂的数据对象