Динамический поиск Angular js с ошибкой MVC

#javascript #c# #jquery #angularjs #asp.net-mvc

#javascript #c# #jquery #angularjs #asp.net-mvc

Вопрос:

При загрузке моей страницы я получаю следующую ошибку (в окне предупреждения) Предупреждение о таблицах данных: идентификатор таблицы = запись-сетка — ошибка Ajax. Для получения дополнительной информации об этой ошибке, пожалуйста, смотрите http://datatables.net/tn/7

Что не так. Я запустил веб-приложение в режиме отладки, и мой C # работает нормально, записи берутся из базы данных, но что-то идет не так с Angular js, когда я отлаживаю в браузере весь код после var app = angular.module('MyApp', ['datatables']); просто игнорируется. Это ошибка в консоли POST http://localhost:10575/teachers/getdata 500 (Internal Server Error)

Вот мои контроллеры MVC

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult getData()
    {
        //Datatable parameter
        var draw = Request.Form.GetValues("draw").FirstOrDefault();
        //paging parameter
        var start = Request.Form.GetValues("start").FirstOrDefault();
        var length = Request.Form.GetValues("length").FirstOrDefault();
        //sorting parameter
        var sortColumn = Request.Form.GetValues("columns["   Request.Form.GetValues("order[0][column]").FirstOrDefault()   "][name]").FirstOrDefault();
        var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();
        //filter parameter
        var searchValue = Request.Form.GetValues("search[value]").FirstOrDefault();
        List<tblTeacher> allCustomer = db.tblTeachers.ToList();
        int pageSize = length != null ? Convert.ToInt32(length) : 0;
        int skip = start != null ? Convert.ToInt32(start) : 0;
        int recordsTotal = 0;
        //Database query
        using (RSEntities dc = new RSEntities())
        {
            var v = (from a in dc.tblTeachers select a);
            //search
            if (!string.IsNullOrEmpty(searchValue))
            {
                v = v.Where(a =>
                    a.FirstName.Contains(searchValue) ||
                    a.SecondName.Contains(searchValue) ||
                    a.Title.Contains(searchValue) ||
                    a.TDepartment.Contains(searchValue)
                    );
            }

            //sort
            if (!(string.IsNullOrEmpty(sortColumn) amp;amp; string.IsNullOrEmpty(sortColumnDir)))
            {
                //for make sort simpler we will add Syste.Linq.Dynamic reference
                v = v.OrderBy(sortColumn   " "   sortColumnDir);
            }

            recordsTotal = v.Count();
            allCustomer = v.Skip(skip).Take(pageSize).ToList();
        }

        return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = allCustomer });
    }
  

Теперь Angular Js

 /// <reference path="angular.js" />
/// <reference path="angular.min.js" />
/// <reference path="angular-route.min.js" />
/// <reference path="angular-route.js" />

var app = angular.module('MyApp', ['datatables']);
app.controller('homeCtrl', ['$scope', '$http', 'DTOptionsBuilder', 'DTColumnBuilder',
    function ($scope, $http, DTOptionsBuilder, DTColumnBuilder) {
        $scope.dtColumns = [
            //here We will add .withOption('name','column_name') for send column name to the server 
            DTColumnBuilder.newColumn("FirstName", "Име").withOption('name', 'FirstName'),
            DTColumnBuilder.newColumn("SecondName", "Фамилия").withOption('name', 'SecondName'),
            DTColumnBuilder.newColumn("Title", "Титла").withOption('name', 'Title'),
            DTColumnBuilder.newColumn("TDepartment", "Факултет").withOption('name', 'TDepartment'),
        ]

        $scope.dtOptions = DTOptionsBuilder.newOptions().withOption('ajax', {
            dataSrc: "data",
            url: "/teachers/getdata",
            type: "POST"
        })
        .withOption('зареждане', true) //for show progress bar
        .withOption('serverSide', true) // for server side processing
        .withPaginationType('full_numbers') // for get full pagination options // first / last / prev / next and page numbers
        .withDisplayLength(10) // Page size
        .withOption('aaSorting', [0, 'asc']) // for default sorting column // here 0 means first column
    }])
  

Наконец, представление

 @{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/DataTables/jquery.dataTables.js"></script>
<script src="~/Scripts/DataTables/jquery.dataTables.min.js"></script>
<script src="~/Scripts/angular.js"></script>
<link href="~/Content/bootstrap.css" rel="stylesheet" />
<link href="~/Content/DataTables/css/jquery.dataTables.css" rel="stylesheet" />
<link href="~/Content/DataTables/css/jquery.dataTables.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-datatables/0.5.5/angular-datatables.js"></script>


<script src="~/Scripts/myApp.js"></script>

<div ng-app="MyApp" class="container">
    <div ng-controller="homeCtrl">
        <table id="entry-grid" datatable="" dt-options="dtOptions" dt-columns="dtColumns" class="table table-hover"></table>
    </div>
</div>
  

Комментарии:

1. Дает ли добавление [HttpPost] над вашим методом getData другой результат?

2. Да, я тоже подумал об этом и попробовал, но результат по-прежнему остается ошибкой

3. Это одна из библиотек, которые я использую, может ли это вызвать проблему? cdnjs.cloudflare.com/ajax/libs/angular-datatables/0.5.5 /…

4. Мой контроллер MVC, контроллер angular и View имеют форматы UTF-8

5. Я нашел корень проблемы — мой контроллер MVC отправляет данные JSON, которые не ожидает мой angular JS