0

我正在尝试返回一个带有 Jquery 数据表的视图,该视图的操作是使用 ActionLink 从上一页启动的——

@Html.ActionLink("View Audit", "Audit", new { id= Model.ID }) 

然后使用从模型 ID 传递的 ID 对 Jquery 数据表进行预过滤。

这是我的 JS 文件...(顺便说一下,静态值(例如 10005)在 fnServerParams 中有效,但我需要根据从上一个屏幕中选择的任何模型 ID 来动态设置该值)

var oTable = $('#myAuditTable').dataTable({
     "sAjaxSource": "GetAuditLog",
        "fnServerParams": function ( aoData )
    {            aoData.push({ "name": "ID", "value": 10005 })
     },
 "aoColumns": [
....

这是我的 Audit.cshtml 页面。

@model IEnumerable<Models.AuditLog>

<table id="myAuditTable" width="100%">
                <tr>...</tr>
</table>

并在控制器中

    public ActionResult GetAuditLog(int ID){

        var logs = db.AuditLog.Where(c => c.ID == ID).ToList();

        var result = from c in logs
                     select new[] { ....
                     };

        return Json(new
        {
            aaData = result
        }, "text/x-json", JsonRequestBehavior.AllowGet); 
}

所以我通常会像这样在 MVC 中传递一个参数:

    public ActionResult Audit(int ID)
    {            
        return View(); 
    }

但是由于 GetAuditLog 是获取结果的操作,我如何将 int ID 获取到 GetAuditLog 操作以便将过滤器传递给记录,而这些记录又以 JSON 的形式传递。我不能在 ActionLink 中调用 GetAuditLog,因为它的工作是提取 JSON,而不是渲染视图。

我不确定我错过了什么。我已经阅读了这个人的文章,因为它们在集成 ASP.NET 和数据表方面非常全面。 http://www.codeproject.com/Articles/155422/jQuery-DataTables-and-ASP-NET-MVC-Integration-Part 但找不到完全适合我的问题。这篇文章似乎很接近...... 如何访问 MVC3 中的 JQuery DataTables 插件 aoData 值? 但并不完全适用,因为他似乎正在使用成功传入的参数。

谢谢你的帮助。

4

1 回答 1

1

您好,您可以通过两种方式实现:

首先创建一个具有 Model.Id 值的隐藏字段,然后将此隐藏字段值分配给您的 datatable() 函数,如下所示

鉴于:

<input type="hidden" id="ID" value="@Model.ID" name="ID" />

然后将您的以下代码和平放在document.ready下,并从隐藏字段中分配值 ID,如下所示:

    $(document).ready(function(){
    var oTable = $('#myAuditTable').dataTable({
   "sAjaxSource": "GetAuditLog",
    "fnServerParams": function ( aoData )
    {            aoData.push({ "name": "ID", "value": $("#ID").val() })
    },
     "aoColumns": [
    ....

    });

第二:将您的 datatable() 函数放在脚本标签下的视图中,并像这样直接分配 Model.Id:

    <script type="text/javascript">
    var oTable = $('#myAuditTable').dataTable({
 "sAjaxSource": "GetAuditLog",
    "fnServerParams": function ( aoData )
{            aoData.push({ "name": "ID", "value": '@Model.ID' })
 },
     "aoColumns": [
    ....
    </script>

希望这能解决这个问题。

于 2013-05-09T05:14:57.377 回答