Jquery Datatable在asp.net核心中使用异步任务方法获取数据

Posted

技术标签:

【中文标题】Jquery Datatable在asp.net核心中使用异步任务方法获取数据【英文标题】:Jquery Datatable fetch data with async task method in asp.net core 【发布时间】:2019-10-18 17:09:06 【问题描述】:

我想获取数据并显示在 asp.net 核心的 jquery 数据表中。 我得到 error method not found (404),但我的方法已经在控制器中。我检查了其他解决方案,但找不到解决方案。

我的代码如下:

jQuery 代码:

$(document).ready(function() 
    $("#kt_table_1").DataTable(
    "oLanguage": 
        "sZeroRecords": "No records to display",
    ,
    "bProcessing": true,
    "bServerSide": true,
    "searching": false,
    "bDestroy": true,
    "bAutoWidth": false,
    "lengthMenu": [[10, 20, 30], [10, 20, 30]],
    "sAjaxSource": "@Url.Action("GetUsersList","UserProfile")",
    "fnServerParams": function (aoData) 
        aoData.push( "name": "searchdata", "value": "" );
        perm = aoData;
    ,
    "fnServerData": function (sSource, aoData, fnCallback, oSettings) 
        oSettings.jqXHR = $.ajax(
            "dataType": 'json',
            "type": "POST",
            "url": sSource,
            "data": aoData,
            "success": fnCallback,
            "timeOut": 10000
        );
    ,
    "sPaginationType": "full_numbers",
    "bDeferRender": true,
    "aoColumns":
    [
        
            "className": 'details-control',
            "orderable": false,
            "data": null,
            "defaultContent": ''
        ,
         "sName": "UserId", "bSearchable": false, "bSortable": false, "width": "25px" ,
         "sName": "UserName", "bSearchable": true, "bSortable": true ,
         "sName": "UserEmail", "bSearchable": true, "bSortable": true ,
         "sName": "UserMobileNo", "bSearchable": true, "bSortable": true ,
         "sName": "UserStatus", "bSearchable": true, "bSortable": true ,
       //  "sName": "Action", "bSearchable": false, "bSortable": false, "className": "icn" 
    ],
    "sAjaxSource": "@Url.Action("GetUsersList","UserProfile")",
    "order": [[2, "desc"]]
    );
);

从数据表调用控制器方法:

   private async Task<IActionResult> GetUsersList(string sEcho, int iDisplayStart, int iDisplayLength, int iSortCol_0, string sSortDir_0, string sColumns, string searchdata)
    
        JQueryDataTableParamModel parm = new JQueryDataTableParamModel();
        parm.sEcho = sEcho;
        parm.iDisplayStart = iDisplayStart;
        parm.iDisplayLength = iDisplayLength;
        parm.sSortDir_0 = sSortDir_0;
        var sColumnsArray = sColumns.Split(',');
        string sortColumn = "";
        if (sColumnsArray.Length > 0 && sColumnsArray.Length >= iSortCol_0)
            sortColumn = Convert.ToString(sColumnsArray[iSortCol_0]);
        try
        
            IEnumerable<string[]> Adminusers = Enumerable.Empty<string[]>();
            if (!String.IsNullOrEmpty(parm.sSearch))
            
                parm.sSearch = parm.sSearch.Replace("'", "''");
            
            ApiClient apiClient = new ApiClient(apiUrl);
            var requestUrl = apiClient.CreateRequestUri(string.Format(System.Globalization.CultureInfo.InvariantCulture,"UsersApi/GetUsersList"));
            List<UserProfile> obj= await Client.GetAsync<List<UserProfile>>(requestUrl);
            List<UserProfile> lstusersModel = new List<UserProfile>();
            foreach (var item in obj)
            
                UserProfile objusersModel = new UserProfile();
                objusersModel.UserId = item.UserId;
                objusersModel.UserName = item.UserName.ToString();
                objusersModel.UserEmail = item.UserEmail.ToString();
                objusersModel.UserMobileNo = item.UserMobileNo.ToString();
                objusersModel.UserStatus = item.UserStatus;
                lstusersModel.Add(objusersModel);
            
            Adminusers = from c in lstusersModel
                         select new string[] 
                                    c.UserId.ToString(),
                                    "<input type='checkbox' name='checkexportId' id='"+ c.UserId +"' Class='checkexportclass' />",
                                    c.UserName.ToString(),
                                    c.UserEmail.ToString(),
                                    c.UserMobileNo.ToString(),
                                    c.UserStatus.ToString(),

            ;
            int noOfRecoreds = 10;
            return Json(new
            
                sEcho = parm.sEcho,
                iTotalRecords = obj.Count,
                iTotalDisplayRecords = noOfRecoreds,
                aaData = Adminusers
            );
        
        catch
        
            throw;
        
    

请检查上面的代码。如果我做任何错误或任何其他方式从 jquery 数据表调用异步任务方法,请建议我。

您的帮助将不胜感激。 先感谢您!

【问题讨论】:

不,它给出错误:找不到方法(404) 你的操作方法是私有的 【参考方案1】:

您的控制器方法是私有的,如果您想从控制器类外部访问它,则需要将其设为公开。

【讨论】:

哦...谢谢。这是我的错!非常感谢。

以上是关于Jquery Datatable在asp.net核心中使用异步任务方法获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Jquery Datatable在asp.net核心中使用异步任务方法获取数据

Jquery Datatable ASP.NET Gridview 大数据集

带有复选框控件的 ASP.Net GridView 和 Jquery dataTable

将 jQuery DataTable 插件应用于从 ASP.NET 动态生成的表

在asp.net mvc中删除数据成功后重新排序自动编号列JQuery Datatable

asp.net webforms中Jquery Datatable中的分页