URL-адрес Ajax Datatables не соответствует действию контроллераJquery

Программирование на jquery
Ответить
Anonymous
 URL-адрес Ajax Datatables не соответствует действию контроллера

Сообщение Anonymous »

Я немного расстроен. Этот же код работает и в другом месте моего проекта. По какой-то причине он не выполняет действие контроллера. Когда страница загружается, появляется таблица данных и появляется всплывающее окно обработки, как будто она не может найти записи. Я поставил точку останова на действие контроллера и обнаружил, что оно даже не достигает его.Код Javascript:

Код: Выделить всё

 $(document).ready(function () {
var oTableMenuPermission = "";
$("#PartsListTable").dataTable({
"ajax": {
"url": "/Home/GetList",
"type": "POST",
"datatype": "json",
},
"responsive": true,
"bRetrieve": true,
"bProcessing": true,
"deferRender": true,
"dom": 'lBfrtip',
"serverSide": "true",
"order": [0, "PartNumber"],
"language": {
"processing": "processing...Please wait"
},
"buttons": [
{ extend: 'copyHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'excelHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'csvHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'pdfHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'print', exportOptions: { columns: ':visible' } }
, 'colvis'
],
columnDefs: [{ orderable: false, targets: [2, 3, 4, 5, 6] }],

"aoColumns": [
{ "data": "PartNumber", "name": "PartNumber" },
{
"data": "PartImage", "aTargets": [0],
"render": function (data) {
if (data === null) return '
[img]Content/Images/Parts/NoImage.png style=[/img]
';
return '
[img]Content/Images/Parts/[/img]
';
}
},
{ "data": "Description", "name": "Description" },
{
"data": "HasUpgrade", "aTargets": [0],
"render": function (data) {
if (data === true) {
return 'Yes[/b]';[b]                    } else {
return 'No[/b]';[b]                    }
}
},
{
"data": "IsUpgrade", "aTargets": [0],
"render": function (data) {
if (data === true) {
return 'Yes[/b]';[b]                    } else {
return 'No[/b]';
}
}
},
{
"mRender": function (oObj, type, full) {
var button = ''
button += '';
button += 'Details ';
button += '';
return button;
}
},

],

});
});
А вот действие контроллера:

Код: Выделить всё

        [HttpPost]
public ActionResult GetList()
{
// Server Side Parameters
int start = Convert.ToInt32(Request["start"]);
int length = Convert.ToInt32(Request["length"]);
string searchValue = Request["search[value]"];
string sortColumnName = Request["column[" + Request["order[0][column]"] + "][name]"];
string sortDirection = Request["order[0][dir]"];

List
  prodList = new List();
using (GeneralEntities db = new GeneralEntities())
{
prodList = db.PartSearchView.ToList();
int totalRows = prodList.Count;
if (!string.IsNullOrEmpty(searchValue))
{
prodList = prodList.Where(x => x.PartNumber != null && x.PartNumber.ToLower().Contains(searchValue.ToLower())).ToList();
}

int totalRowsAfterFilteing = prodList.Count;
// Sorting
prodList = prodList.OrderBy(sortColumnName + " " + sortDirection).ToList();

prodList = prodList.Skip(start).Take(length).ToList();

return Json(new { data = prodList, draw = Request["draw"], recordsTotal = totalRows, recordsFiltered = totalRowsAfterFilteing }, JsonRequestBehavior.AllowGet);
}

}
Я пробовал изменить URL-адрес на @Url.Action("GetList", "Home").
Возможно, это как-то связано с маршрутизацией, но я не вижу нигде в конфигурации маршрута, где есть проблема.
Я попытался перейти непосредственно к URL-адресу, и он вытащил страницу 404, в отличие от той, которая работает, которая выдает ошибку, но также попадает в контроллер action.
Спасибо за помощь!
ОБНОВЛЕНИЕ:
Ниже приведена конфигурация моего маршрута. Я изменил имя страницы и действие контроллера на PartSearch, прежде чем это было просто Parts. Все еще та же проблема. Это часть домашнего контроллера.

Код: Выделить всё

 public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

// routes.MapRoute(
//    name: "Roles",
//    url: "Roles/{action}/{id}",
//    defaults: new { controller = "UserAndRole", action = "Index", id = UrlParameter.Optional }
//);

routes.MapRoute(
name: "About",
url: "About",
defaults: new { controller = "Home", action = "About" }
);

routes.MapRoute(
name: "Services",
url: "Services",
defaults: new { controller = "Home", action = "Services" }
);

routes.MapRoute(
name: "Contact",
url: "Contact",
defaults: new { controller = "Home", action = "Contact" }
);

routes.MapRoute(
name: "Quote",
url: "Quote",
defaults: new { controller = "Home", action = "Quote" }
);

routes.MapRoute(
name: "MyEquipment",
url: "MyEquipment/{id}",
defaults: new { controller = "MyEquipment", action = "Index" }
);

// routes.MapRoute(
// name: "PartsSearch",
// url: "Parts",
// defaults: new { controller = "Home", action = "Parts" }
//);

routes.MapRoute(
name: "MyEquipmentTlj",
url: "MyEquipment/Parts/{id}",
defaults: new { controller = "MyEquipment", action = "Parts" }
);

// routes.MapRoute(
// name: "Dashboard",
//    url: "Dashboard/{id}",
//    defaults: new { controller = "Dashboard", action = "Index", page = UrlParameter.Optional }
//);

routes.MapRoute(
name: "EquipCat",
url: "Equipment/Category/{slug}/{Catid}",
defaults: new { controller = "Equipment", action = "Index", page = UrlParameter.Optional }
);
routes.MapRoute(
name: "EquipTag",
url: "Equipment/Tag/{slug}/{Tagid}",
defaults: new { controller = "Equipment", action = "Index", page = UrlParameter.Optional }
);

routes.MapRoute(
name: "EquipPost",
url: "Equipment/Post/{id}/{slug}",
defaults: new { controller = "Equipment", action = "Post" }
);

routes.MapRoute(
name: "AddUsers",
url: "Users/Create/{CompanyId}/{AddressId}",
defaults: new { controller = "Users", action = "Create" }
);

routes.MapRoute(
name: "BestenAddUsers",
url: "UsersManager/Create/{CompanyId}/{AddressId}",
defaults: new { controller = "UsersManager", action = "Create" }
);

routes.MapRoute(
name: "AddMachines",
url: "Machine/Add/{CompanyId}/{AddressId}",
defaults: new { controller = "Machine", action = "Add" }
);
routes.MapRoute(
name: "EventManagerAdd",
url: "CalendarManager/Add/{companyId}/{addressId}",
defaults: new { controller = "CalendarManager", action = "Add" }
);

routes.MapRoute(
name: "ListAddresses",
url: "Addresses/{id}",
defaults: new { controller = "Addresses", action = "Index" }
);

routes.MapRoute(
name: "ListOrders",
url: "Orders/{id}",
defaults: new { controller = "Orders", action = "Index"  }
);

routes.MapRoute(
name: "UserCreate",
url: "Users/create/{CompanyId}/{AddressId}",
defaults: new { controller = "Users", action = "Create"}
);

routes.MapRoute(
name: "NotesAdd",
url: "Notes/Add/{CompanyId}/{AddressId}",
defaults: new { controller = "Notes", action = "Add" }
);

routes.MapRoute(
name: "SerialAdd",
url: "SerialNumbers/AddSerial/{SerialNumber}/{CompanyId}/{AddressId}",
defaults: new { controller = "SerialNumbers", action = "AddSerial" }
);

routes.MapRoute(
name: "SerialSearch",
url: "SerialSearch",
defaults: new { controller = "Home", action = "SerialSearch" }
);

routes.MapRoute(
name: "ExpensesAdd",
url: "ExpenseReports/Create/{CompanyId}/{AddressId}",
defaults: new { controller = "ExpenseReports", action = "Create" }
);

routes.MapRoute(
name: "InvoiceList",
url: "Invoice/{cmpid}",
defaults: new { controller = "Invoice", action = "Index" }
);

routes.MapRoute(
name: "BInvoiceList",
url: "InvoiceManager/{cmpid}",
defaults: new { controller = "InvoiceManager", action = "Index", cmpid = UrlParameter.Optional }
);

routes.MapRoute(
name: "CInvoiceList",
url: "InvoiceManager/List/{addid}",
defaults: new { controller = "InvoiceManager", action = "List" }
);

routes.MapRoute(
name: "QuoteList",
url: "Quotes/{cmpid}",
defaults: new { controller = "Quotes", action = "Index" }
);

routes.MapRoute(
name: "PurchaseOrderAdd",
url: "PurchaseOrder/Add/{id}/{RFQID}",
defaults: new { controller = "PurchaseOrder", action = "Add" }
);

routes.MapRoute(
name: "Subjobs",
url: "SubJobs/{id}",
defaults: new { controller = "SubJobs", action = "Index" }
);

routes.MapRoute(
name: "BQuoteList",
url: "QuotePdfManager/{cmpid}",
defaults: new { controller = "QuotePdfManager", action = "Index", cmpid = UrlParameter.Optional }
);

routes.MapRoute(
name: "CQuoteList",
url: "QuotePdfManager/List/{addid}",
defaults: new { controller = "QuotePdfManager", action = "List" }
);

routes.MapRoute(
name: "ConfirmEmail",
url: "Account/SendEmailConfirm/{UserName}",
defaults: new { controller = "Account", action = "SendEmailConfirm" }
);

routes.MapRoute(
name: "ShippingAdd",
url: "ShippingOrBOLs/Add/{companyId}/{addressId}/{orderId}",
defaults: new { controller = "ShippingOrBOLs", action = "Add" }
);

routes.MapRoute(
name: "EventAdd",
url: "Calendar/{companyId}/{addressId}",
defaults: new { controller = "Calendar", action = "Index" }
);

routes.MapRoute(
name: "MessagesAdd",
url: "Messages/Add/{user}",
defaults: new { controller = "Messages", action = "Add" }
);

routes.MapRoute(
name: "PastDue",
url: "InvoiceManager/PastDue/{id}/{pastdue}",
defaults: new { controller = "InvoiceManager", action = "PastDue"  }
);

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Я изменил имя, потому что у меня есть PartsController. PartsController используется в серверной части и требует учетных данных для входа. Поэтому я не смог использовать его для этого.
ОБНОВЛЕНИЕ:
Я нашел свою проблему. Как бы глупо это ни казалось, основная причина, по которой это не подействовало на контроллер, заключалась в том, что в строке, где у меня есть columnsDefs: [{ orderable: false, Targets: [2, 3, 4, 5, 6] }], Было с 1 по май, есть 6 столбцов, но я забыл посчитать первый как 0. Я уже сталкивался с этим раньше, когда использовал оператор foreach вместо серверной стороны, потому что форматирование не отображается на стороне сервера. load - имеется в виду кнопки, поиск, количество записей и т.д. Но все равно заполняет записи. Я думаю, на стороне сервера происходит сбой перед генерацией записи. Так что к маршрутизации это вообще не имеет никакого отношения. И ошибка, которую я получал, я не думал, что она имеет к этому какое-то отношение, поскольку там говорилось что-то о стиле. Я нашел ответ на форуме dataTables. Спасибо всем, кто помог в этом.

Подробнее здесь: https://stackoverflow.com/questions/692 ... ler-action
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»