добавить ActionLink "Подробности", "Редактировать", "Удалить" в список ajax mvc 5. - PullRequest
0 голосов
/ 08 января 2020

Я хочу, чтобы ActionLink "Подробности", "Редактировать" и "Удалить" в соответствии с идентификатором со списком Ajax, мне удалось вывести свой список с помощью datatable без моих столбцов в скрипте, как вы можете видеть в мой код, я хотел бы добавить 3 ссылки в конце моей таблицы. My ViewList here

Это мой контроллер:

[HttpGet]
        public string Loadregistrationslist(int draw, int? start, int? length)
        {
            try
            {
                int IdFilter = 0;
                string textFilter = "";

                if (start == null)
                {
                    start = 0;
                }
                else
                {
                    start -= 1;
                }
                if (start < 1)
                    start = 0;


                if (length == null)
                {
                    length = 10;
                }

                var QueryString = HttpContext.Request.QueryString;
                var orderBy = QueryString.Get("order[0][column]");
                var orderByDir = QueryString.Get("order[0][dir]");
                var search = QueryString.Get("search[value]");


                var query = db.Registrations.Select(r => new RegistrationsList()
                {
                    ID = r.ID,
                    FullName = r.LastName + " " + r.FirstName,
                    Email = r.Email,
                    BirthDate = r.BirthDate
                });

                if (search != null) {
                    int n;
                    search = search.Trim();
                    var isNumeric = int.TryParse(search, out n);
                    if (isNumeric)
                    {
                        IdFilter = n;
                        query = query.Where(x => x.ID == IdFilter);
                    }
                    else if (search != "")
                    {
                        textFilter = search;
                        query = query.Where(x => x.FullName.Contains(textFilter) || x.Email.Contains(textFilter));
                    }
                }
                string sortOrder = $"{orderBy}_{orderByDir.ToUpper()}";
                switch (sortOrder)
                {
                    //FullName
                    case "1_DESC":
                        query = query.OrderByDescending(s => s.FullName);
                        break;
                    case "1_ASC":
                        query = query.OrderBy(s => s.FullName);
                        break;
                    //Email
                    case "2_DESC":
                        query = query.OrderByDescending(s => s.Email);
                        break;
                    case "2_ASC":
                        query = query.OrderBy(s => s.Email);
                        break;
                    //ID
                    case "0_DESC":
                        query = query.OrderByDescending(s => s.ID);
                        break;
                    default:  // ID ascending 
                        query = query.OrderBy(s => s.ID);
                        break;
                }

                var data = query.Skip((int)start).Take((int)length).ToList<RegistrationsList>();
                var lstData = new List<List<string>>();
                foreach (var dataRow in data) {
                    var row = new List<string>() { 
                        dataRow.ID.ToString(), dataRow.FullName, dataRow.Email, dataRow.BirthDate.ToString()
                    };
                    lstData.Add(row);
                }

                var recordsTotal = db.Registrations.Select(x => x.ID).Count();
                var recordsFiltered = query.Count();
                var response = new DataTablesResponse()
                {
                    draw = draw,
                    recordsTotal = recordsTotal,
                    recordsFiltered = recordsFiltered,
                    data = lstData
                };
                return JsonConvert.SerializeObject(response, _jsonSerializerSettings);
            }
            catch (AjaxFunctionalException ex)
            {
                return JsonConvert.SerializeObject(new DataTablesResponse()
                {
                    draw = draw,
                    recordsTotal = 0,
                    recordsFiltered = 0,
                    data = new List<List<string>>()/*,
                    errcode = ex.code,
                    errmessage = ex.Message,
                    errdata = ex.data*/
                }, _jsonSerializerSettings);
            }
            catch (Exception ex)
            {
                return JsonConvert.SerializeObject(new DataTablesResponse()
                {
                    draw = draw,
                    recordsTotal = 0,
                    recordsFiltered = 0,
                    data = new List<List<string>>()
                    /*code = 5000,
                    message = ex.Message,
                    data = null*/
                }, _jsonSerializerSettings);
            }
        }

Это мой ajax звонок:

$(document).ready(function () 
{
    $("#registrationTable").DataTable({
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "/Home/Loadregistrationslist",
            "type": "GET",
            "datatype": "json"
        }
    });
});

А это мой html для таблицы:

<table id="registrationTable" class="table table-striped dt-responsive display datatable dtr-inline" role="grid" aria-describedby="example-1_info">
                                <thead>
                                    <tr>
                                        <th>
                                            ID
                                        </th>
                                        <th>
                                            @Resource.FullName
                                        </th>
                                        <th>
                                            @Resource.Email
                                        </th>
                                        <th class="sorting_desc_disabled sorting_asc_disabled">
                                            @Resource.BirthDate
                                        </th>
                                        @*<th>
                                            Edit
                                        </th>
                                        <th>
                                            Delete
                                        </th>*@
                                    </tr>
                                </thead>
                            </table>

1 Ответ

0 голосов
/ 21 января 2020

Я нашел решение, мой контроллер немного изменился, поэтому вот мой новый код:

В моем контроллере:

[HttpGet]
        public string Loadregistrationslist(int draw, int? start, int? length)
        {
            try
            {
                int IdFilter = 0;
                string textFilter = "";

                if (start == null)
                {
                    start = 0;
                }
                else
                {
                    start -= 1;
                }
                if (start < 1)
                    start = 0;


                if (length == null)
                {
                    length = 10;
                }

                string orderByDir, search;
                int orderByIdx;
                List<string> cols = ExtractDataSortAndFilter(out orderByIdx, out orderByDir, out search);

                var query = db.Registrations.Select(r => new RegistrationsList()
                {
                    ID = r.ID,
                    FullName = r.LastName + " " + r.FirstName,
                    Email = r.Email,
                    BirthDate = r.BirthDate
                });

                if (search != null)
                {
                    int n;
                    search = search.Trim();
                    var isNumeric = int.TryParse(search, out n);
                    if (isNumeric)
                    {
                        IdFilter = n;
                        query = query.Where(x => x.ID == IdFilter);
                    }
                    else if (search != "")
                    {
                        textFilter = search;
                        query = query.Where(x => x.FullName.Contains(textFilter) || x.Email.Contains(textFilter));
                    }
                }
                string sortOrder = $"{cols[orderByIdx]}_{orderByDir.ToUpper()}";
                switch (sortOrder)
                {
                    //FullName
                    case "FullName_DESC":
                        query = query.OrderByDescending(s => s.FullName);
                        break;
                    case "FullName_ASC":
                        query = query.OrderBy(s => s.FullName);
                        break;
                    //Email
                    case "Email_DESC":
                        query = query.OrderByDescending(s => s.Email);
                        break;
                    case "Email_ASC":
                        query = query.OrderBy(s => s.Email);
                        break;
                    //ID
                    case "ID_DESC":
                        query = query.OrderByDescending(s => s.ID);
                        break;
                    default:  // ID ascending 
                        query = query.OrderBy(s => s.ID);
                        break;
                }
                var data = new List<RegistrationsList>();
                if (length > -1)
                {
                    data = query.Skip((int)start).Take((int)length).ToList<RegistrationsList>();
                }
                else
                {
                    data = query.Skip((int)start).ToList<RegistrationsList>();
                }
                /*var lstData = new List<List<string>>();
                foreach (var dataRow in data) {
                    var row = new List<string>() { 
                        dataRow.ID.ToString(), dataRow.FullName, dataRow.Email, dataRow.BirthDate.ToString()
                    };
                    lstData.Add(row);
                }*/

                var recordsTotal = db.Registrations.Select(x => x.ID).Count();
                var recordsFiltered = query.Count();
                var response = new DataTablesResponse()
                {
                    draw = draw,
                    recordsTotal = recordsTotal,
                    recordsFiltered = recordsFiltered,
                    data = data
                };
                return JsonConvert.SerializeObject(response, _jsonSerializerSettings);
            }
            catch (AjaxFunctionalException ex)
            {
                return JsonConvert.SerializeObject(new DataTablesResponse()
                {
                    draw = draw,
                    recordsTotal = 0,
                    recordsFiltered = 0,
                    data = new List<RegistrationsList>()/*,
                    errcode = ex.code,
                    errmessage = ex.Message,
                    errdata = ex.data*/
                }, _jsonSerializerSettings);
            }
            catch (Exception ex)
            {
                return JsonConvert.SerializeObject(new DataTablesResponse()
                {
                    draw = draw,
                    recordsTotal = 0,
                    recordsFiltered = 0,
                    data = new List<RegistrationsList>()
                    /*code = 5000,
                    message = ex.Message,
                    data = null*/
                }, _jsonSerializerSettings);
            }
        }

        private List<string> ExtractDataSortAndFilter(out int orderByIdx, out string orderByDir, out string search)
        {
            List<string> cols;
            var QueryString = HttpContext.Request.QueryString;

            cols = new List<string>();
            string colName = null, colNamePath = "";
            int colIdx = 0;
            do
            {
                colNamePath = "columns[" + colIdx + "][data]";
                colName = QueryString.Get(colNamePath);
                cols.Add(colName);
                colIdx++;
            } while (colName != null);
            string orderBy = QueryString.Get("order[0][column]");
            orderByDir = QueryString.Get("order[0][dir]");
            search = QueryString.Get("search[value]");
            orderByIdx = orderBy == null ? 0 : int.Parse(orderBy);
            orderByDir = orderByDir == null ? "asc" : orderByDir;
            search = search == null ? "" : search;
            return cols;
        }

и это мой скрипт:

$(document).ready(function () {
    $("#registrationTable").DataTable({
        "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "/Home/Loadregistrationslist",
            "type": "GET",
            "datatype": "json"
        },
        "columns": [
            {
                data: null,
                title: "<input type=\"checkbox\" id=\"btnSelAllStudents\">",
                render: function (data, type, row, meta) {
                    return '<input type="checkbox" id="cbxRegStudent_' + row.ID + '" value="' + row.ID + '">';
                },
                targets: "no-sort",
                orderable: false
            },
            { data: "ID", title: "ID" },
            { data: "FullName", title: "@Resource.FullName" },
            { data: "Email", title: "@Resource.Email" },
            { data: "BirthDate", title: "@Resource.BirthDate" },
            {
                data: null, title: "Actions",
                render: function (data, type, row, meta) {
                    /*return '<input type="button" class="btn-print printrec" id="' + row.ID + '" value="Print"/>';*/
                    return '<a href=\"StudentProfile/' + row.ID + '\">@Resource.Profile</a> | <a href=\"StudentEdit/' + row.ID + '\">@Resource.Edit</a>';
                },
                targets: "no-sort",
                orderable: false

            }
        ],
        order: [],
    });

    $("#btnSelAllStudents").on("change", function (e) {
        $("input[id^='cbxRegStudent_']").prop("checked", $(this).prop("checked"));
    });

    $('#registrationTable').on('processing.dt', function (e, settings, processing) {
        $("#btnSelAllStudents").prop("checked", false);
    }).dataTable();

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...