2017-04-06 134 views
0

控制器:数据表服务器端处理的C#MVC

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult LoadData() 
    { 
     var draw = Request.Form.GetValues("draw").FirstOrDefault(); 
     var start = Request.Form.GetValues("start").FirstOrDefault(); 
     var length = Request.Form.GetValues("length").FirstOrDefault(); 
     var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault(); 
     var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault(); 
     int pageSize = length != null ? Convert.ToInt32(length) : 0; 
     int skip = start != null ? Convert.ToInt32(start) : 0; 
     int totalRecord = 0; 
     using (ACETeaEntities db = new ACETeaEntities()) 
     { 
      var v = (from item in db.Drinks_Category select item); 
      if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir))) 
      { 
       v = v.OrderBy(sortColumn + " " + sortColumnDir); 
      } 
      totalRecord = v.Count(); 
      var data = v.Skip(skip).Take(pageSize).ToList(); 
      return Json(new { draw = draw, recordsFilterd = totalRecord, recordsTotal = totalRecord, data = data }, JsonRequestBehavior.AllowGet); 
     } 
    } 
} 

查看:v = v.OrderBy(sortColumn + " " + sortColumnDir);

有人可以帮我解决这个问题:在

<script src="~/Scripts/jquery-1.7.2.js" ></script> 

<script src="~/Scripts/DataTables/jquery.dataTables.js" ></script> 

<link rel="stylesheet" type="text/css" href="~/Content/DataTables/css/jquery.dataTables.css"> 


<script> 

    $(document).ready(function() { 
     $('#example').dataTable({ 
      "processing": true, 
      "serverSide": true, 
      "filter": true, 
      "ordermulti": false, 
      "ajax": { 
       "url": "/Home/LoadData", 
       "type": "POST", 
       "dataType": "json" 
      }, 
      "columns": [ 
       { "data": "Name_category", "autoWidth": true }, 
       { "data": "Id_category", "autoWidth": true }, 
       { "data": "Parent", "autoWidth": true } 
      ] 
     }); 
    }); 
</script> 


<div style="margin:30px;"> 
    <table id="example" class="display" cellspacing="0" width="100%"> 
     <thead> 
      <tr style="text-align:left;"> 
       <th>Id</th> 
       <th>Name</th> 
       <th>Parent</th> 
      </tr> 
     </thead> 
     <tfoot> 
      <tr style="text-align:left;">  
      </tr> 
     </tfoot> 
    </table> 
</div> 

我的代码中的错误?

回答

1

当使用排序依据的方法,你需要通过你想要的属性来排序的列,并使用不同的方法来确定方向

例如:

v = v.OrderBy(i => i.myColumn); 
v = v.OrderByDescending(i => i.myColumn); 

既然你得到您的参数字符串,你有两个选择:

1)你可以通过它之前,首先建立自己的功能和定义你的方向

例如:

if (sortColumn == "myColumn") 
{ 
    myOrderByFunc = i => i.myColumn; 
} 
elseif (sortColumn == "myOtherColumn") 
{ 
    myOrderByFunc = i => i.myOtherColumn; 
} 

if (direction == "asc") 
{ 
    v = v.OrderBy(myOrderByFunc); 
} 
elseif (direction == "desc") 
{ 
    v = v.OrderByDescending(myOrderByFunc); 
} 

2)您可以使用现有的here库System.Linq.Dynamic直接在LINQ查询使用字符串(如你现在正在做的)