Nano Hash - криптовалюты, майнинг, программирование

Как загрузить данные в datatable с помощью ajax в mvc

Я загружаю список объектов из базы данных в базу данных с помощью ajax. При отладке результат моего действия MVC, похоже, запрашивает данные в порядке, но столбец с данными отображает null

Я пытался сериализовать список, прежде чем возвращать его в действии MVC, но это не решило проблему.

// Code from View

<table class="table table-striped" id="codetable">
<thead>
    <tr>
        <td>Student Number</td>
        <td>Student</td>
        <td>Faculty</td>
        <td>Department</td>
        <td>Program</td>
        <td>Code</td>
    </tr>
</thead>
<tbody>

</tbody>
</table>

<script>
    $(document).ready(function () {
        $("#codetable").DataTable({
            processing: true,
            serverSide: true,
            info: true,
            ajax: {
                url: '@Url.Action("GetVoters", "Index")',
                dataSrc: ""
            },

            Columns: [
                { "data": "StudentNumber" },
                { "data": "Name" },
                { "data": "Faculty" },
                { "data": "Department" },
                { "data": "Program" },
                { "data": "Code" }
            ]
        });
    });
</script>


//Code from Controller

public JsonResult GetVoters()
{
List<vt> stud = (from student in _context.Voters
                      select new vt
                      {
                          StudentNumber = student.StudentNumber,
                          Name = student.Name,
                          Faculty = student.Faculty,
                          Department = student.Department,
                          Program = student.Program,
                          Code = student.Code
                      }).Take(100).ToList();
        var js = new System.Web.Script.Serialization.JavaScriptSerializer();
        var result = js.Serialize(stud);
        return Json(result, JsonRequestBehavior.AllowGet);
    }

public class vt
{
    public string StudentNumber { get; set; }
    public string Name { get; set; }
    public string Faculty { get; set; }
    public string Department { get; set; }
    public string Program { get; set; }
    public string Code { get; set; }
}

Я ожидаю, что таблица будет отображать различные столбцы в списке, но выдает эту ошибку «Предупреждение DataTables: table id = codetable - Requested Unknown parameter '1' for row 0, column 1 ...» и отображает результаты только в первом столбце ( таким образом, символ в строке). Остальные столбцы показывают ноль

Отображаемая ошибка


  • Заполните свои коды. Atction, ajax, рендеринг данных 30.03.2019

Ответы:


1

ОБНОВЛЕНИЕ

Я нашел лучший способ использовать AJAX для ваших исходных данных из контроллера. Используйте этот метод для своей сетки DataTable с AJAX:

Чтобы отображать данные через AJAX в плагине DataTable, внесите в код следующие изменения:

Добавьте модель под названием DataTable

public class DataTable
{
    public List<vt> data { get; set; }
}

Затем в вашем контроллере:

public JsonResult GetVoters()
{
 DataTable dataTable = new DataTable();
 List<vt> stud = (from student in _context.Voters
                      select new vt
                      {
                          StudentNumber = student.StudentNumber,
                          Name = student.Name,
                          Faculty = student.Faculty,
                          Department = student.Department,
                          Program = student.Program,
                          Code = student.Code
                      }).Take(100).ToList();
    //The magic happens here
    dataTable.data = stud;
    return Json(dataTable, JsonRequestBehavior.AllowGet);
  }

И, наконец, в вашем представлении используйте этот скрипт для заполнения вашего DataTable:

 <script type="text/javascript">
    $(document).ready(function () {

        //For filtering:
        $('#codetable thead tr').clone(true).appendTo('#codetable thead');
        $('#codetable thead tr:eq(1) th').each(function (i) {
            var title = $(this).text();
            $(this).html('<input type="text" placeholder="Search ' + title + '" />');

            $('input', this).on('keyup change', function () {
                if (table.column(i).search() !== this.value) {
                    table
                        .column(i)
                        .search(this.value)
                        .draw();
                }
            });
        });

        var table=$('#codetable').DataTable({
            "ajax": '@Url.Action("GetVoters", "Index")',
            "columns": [
                { "data": "StudentNumber" },
                { "data": "Name" },
                { "data": "Faculty" },
                { "data": "Department" },
                { "data": "Program" },
                { "data": "Code" }
            ]
        });
    });
</script>

И я почти забыл, измените структуру вашей HTML-таблицы также для вашей цели фильтрации:

<table class="table table-striped" id="codetable">
        <thead>
            <tr>
                <th>Student Number</th>
                <th>Student</th>
                <th>Faculty</th>
                <th>Department</th>
                <th>Program</th>
                <th>Code</th>
            </tr>
        </thead>
        <tbody></tbody>
</table>

Я использовал DataTables с объектами AJAX в качестве источника данных для вашей сетки.

Ваше здоровье.

30.03.2019
  • Данные загружаются нормально, спасибо, но поиск и разбиение на страницы не работают, хотя я установил bFilter в значение true 30.03.2019
  • Вам нужно будет явно добавить эти фильтры, что также включает ваш поиск. Поскольку вы отправляете на сервер свои данные, вам нужно будет выполнить фильтрацию и поиск из своего списка. 30.03.2019
  • @Shagragada Найдите обновленный ответ с поиском и фильтрацией, а также лучший способ инициализации DataTable через AJAX. 30.03.2019

  • 2

    Это также сработало, когда я прочитал данные из API, а не из контроллера. И в этом случае DataTables сохранил стандартные параметры фильтрации, сортировки и разбивки на страницы. При отладке формат данных, возвращаемых API и контроллером JsonResult, кажется одинаковым. Я действительно не могу объяснить, почему API работает, а контроллер - нет.

    //The API Code
    
    public IEnumerable<vt> GetStudents()
        {
            return _context.Voters.Select(x=>new vt { StudentNumber = x.StudentNumber, Name = x.Name, Faculty = x.Faculty, Department = x.Department, Program = x.Program, Code = x.Code }).ToList();
        }
    
    
    
    //The only change in the jquery script is the url which now points to the API
    
    <script>
    $(document).ready(function () {
        $("#codetable").DataTable({
            processing: true,
            serverSide: true,
            info: true,
            ajax: {
                url: "/api/Students",
                dataSrc: ""
            },
    
            Columns: [
                { "data": "StudentNumber" },
                { "data": "Name" },
                { "data": "Faculty" },
                { "data": "Department" },
                { "data": "Program" },
                { "data": "Code" }
            ]
        });
    });
    

    31.03.2019
  • Эта ссылка даст вам хорошее представление о том, почему API работает в этом случае: stackoverflow.com/questions/9494966/ 01.04.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..