如何从jQuery数据表中的ajax数据源获取mRender()函数中的隐藏列值

我试图从asp.net mvc5中的ajax源创建一个jQuery数据表。 我想添加一个额外的列用于编辑和删除,这不在我的模型类或ajax数据源中。对于编辑和删除function,我需要Id列的值,我没有在我的数据表中显示。

这是我的Model类:

public class Country { public int Id { get; set; } [Required(ErrorMessage = "Country Code Name Must not be empty")] public String Code { get; set; } [Required(ErrorMessage = "Country Name Must not be empty")] public String Name { get; set; } [Required(ErrorMessage = "Template Name Must not be empty")] public String Template { get; set; } [Required(ErrorMessage = "SPViews Name Must not be empty")] public String SPViews { get; set; } } 

这是我的控制器:

  public ActionResult GetAll(JQueryDataTableParamModel param) { var countryList = _repository.GetAll().ToList(); var filteredCountry = (from e in countryList where (param.sSearch == null || e.Name.ToLower().Contains(param.sSearch.ToLower())) select e).ToList(); var result = from country in filteredCountry.Skip(param.iDisplayStart).Take(param.iDisplayLength) select new[] { country.Id,country.Code, country.Name, country.Template, country.SPViews }; return Json(new { sEcho = param.sEcho, iTotalRecords = countryList.Count(), iTotalDisplayRecords = filteredCountry.Count, aaData = result }, JsonRequestBehavior.AllowGet); } 

这是我的html表:

 
Id Code Name Template SPViews  

最后这是我的jQuery代码:

  var countryTable = $("#countryListTable").dataTable({ "bServerSide": true, "bProcessing": true, "sAjaxSource": "/Country/GetAll", "aoColumns": [ null, null, null, null, { // fifth column (Edit link) "mData": "Id", "bSearchable": false, "bSortable": false, "mRender": function (nRow, aData) { //need to get the Id column value return 'EditDelete'; } } ] }); 

任何帮助,将不胜感激。 问候 :)

首先,我会尝试使用aoColumnDefs而不是aoColumns
根据数据表文档:

http://datatables.net/usage/columns

aoColumnDefs :此数组允许您使用数组中每个对象的aTargets属性来定位特定列,多列或所有列(请注意,DataTables 1.7中引入了aoColumnDefs)。 这在创建表时具有很大的灵活性,因为aoColumnDefs数组可以是任意长度,以您特别需要的列为目标。

接下来,我不能完全告诉你打算如何在编辑和删除链接中使用Id ,但是这里的Id被附加到url

  "aoColumnDefs": [ { "mData": "Code ", "aTargets": [ 0 ] }, { "mData": "Name", "aTargets": [ 1 ] }, { "mData": "Template", "aTargets": [ 2 ] }, { "mData": "SPViews", "aTargets": [ 3 ] }, { "mData": "Id", "aTargets": [ 4 ], "mRender": function ( data, type, full ) { return 'EditDelete'; } }, { "bSortable": false, "aTargets": [ 4 ] } ], 

…在这里, Id显示为一个数据属性 ,您可以访问其值,例如,使用jquery:

  "aoColumnDefs": [ { "mData": "Code ", "aTargets": [ 0 ] }, { "mData": "Name", "aTargets": [ 1 ] }, { "mData": "Template", "aTargets": [ 2 ] }, { "mData": "SPViews", "aTargets": [ 3 ] }, { "mData": "Id", "aTargets": [ 4 ], "mRender": function ( data, type, full ) { return 'EditDelete'; } }, { "bSortable": false, "aTargets": [ 4 ] } ], 

@ mg1075谢谢你的回复。 fnRender函数似乎已被弃用 。 我没有尝试你的解决方案,但我使用mRenderfunction修复了另一种方式。 所以这是我的解决方案:

  countryTable = $("#countryListTable").dataTable({ "bServerSide": true, "bProcessing": true, "sAjaxSource": "/Country/GetAll", "aoColumns": [ { "bVisible": false }, null, null, null, null, { mData: 0,//The Id column "bSearchable": false, "bSortable": false, mRender: function (data, type, row) { return 'EditDelete'; } }], }); 

我认为这两种方法都应该是完美的