我在* .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 debuger,我就无法识别该对象。
问题
如何确保aspx页面将整个DataTable对象发送到javascript并将javascript发送回服务器控制器,以便我可以操作值?
更新
如果有办法从View直接进入控制器,我也会对此持开放态度
答案 0 :(得分:0)
首先,<%:Model.DataTable%>
上有一个错误,这应该是<%=Model.DataTable%>
看看是否有帮助,否则你可以做的是将该对象作为隐藏元素放入可能是带有ID的输入标记在javascript document.getElementById(id of your hidden Input)
的帮助下传递该元素对象,看看是否有帮助。
答案 1 :(得分:0)
我最终使用了Session []变量。
myPage.aspx
<%
Session["myTable"] = Model.DataTable;
%>
postBackUrl - 在控制器中
DataTable table = (DataTable)HttpContext.Session["myTable"];
此时,表现在具有模型的值,我不必在javascript中处理复杂的数据对象