数据服务器端处理c#mvc

时间:2017-04-06 08:55:37

标签: c# asp.net-mvc linq

控制器:

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);
        }
    }
}

查看:

<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>

我的代码错误在:v = v.OrderBy(sortColumn + " " + sortColumnDir);

有人可以帮我解决吗?

2 个答案:

答案 0 :(得分:1)

使用OrderBy方法时,您需要将要排序的列作为属性传递,并使用不同的方法来定义方向

例如:

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)您可以使用可用的System.Linq.Dynamic库here直接在linq查询中使用字符串(就像您现在所做的那样)

答案 1 :(得分:1)

请注意,您还可以尝试更新的库System.Linq.Dynamic.Core,它支持 OrderBy 以及 ThenBy