我在我的一个视图中使用jquery数据表,并希望生成一个包含过滤数据结果的报告,因此要生成报告,我能想到的最简单的解决方案是生成一个pdf文件(在无论如何,为了获得过滤结果,我使用以下方法:
myDataTableHandle = $('#example1').dataTable(...);
var myFilteredRows = myDataTableHandle._('tr', {"filter":"applied"});
要通过点击从js文件打开视图我发现我可以使用类似的东西:
function foo(id) {
var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';
window.location.href = url.replace('__id__', id);
}
现在我想知道是否有办法将js数组传递给MVC视图,换句话说是myFilteredRows,还是有另一种方法将filtred结果传递给控制器,然后从那里调用视图?< / p>
我希望我的问题很清楚
答案 0 :(得分:2)
在我看来,你在了解这件事是如何运作方面存在差距。在您编写的js代码(foo(id))中,您没有调用视图,您正在向服务器端发出请求,因此这是通过控制器(操作方法分支被调用 - 将断点放在那里检查)然后action方法调用视图,它将在客户端返回给你。
此外,在您将id参数传递给控制器操作方法的函数中,您可以将数组作为字符串传递,但是您需要更新控制器上用于该操作方法的签名。
public ActionResult Branch(int id, string array)
然后,您需要编辑视图以从控制器接受此数组,方法是将其添加到视图包中
ViewBag.array = array
如果分支视图正在接受模型,您也可以将其添加到模型中。在视图中你必须在一个js块中定义一个数组来接受这个,就像这样(这可能不会按原样运行,你必须在浏览器中调试js,直到你做对了)
var array = [@ViewBag.array];
视图是HTML内容的MVC术语,它是我们在服务器端处理的一些内容,您的控制器在MVC框架的帮助下使用视图将数据从控制器传递到视图。当你谈到客户端时,说到视图现在变得含糊不清。我希望你明白这一点。