JQuery AJAX вызов не попадает в контроллер из-за большого параметра строки данных - PullRequest
0 голосов
/ 08 мая 2018

В моем файле просмотра я выполняю вызов ajax следующим образом:

 $.ajax(
    {

        url: '@Url.Action("LMTDetailDashboardList", "DetailUsage")',
        dataType: "json",
        data:
        {
            ServerID: ServerID,
            LicenseId: LicenseId,
            company: company,
            fromDate: fromDate,
            toDate: toDate,
            fromhour: fromHour,
            toHour: toHour
        },
        type: "GET",
        error: function (xhr, status, error) {
            var err = eval("(" + xhr.responseText + ")");
            toastr.error(err.message);
        },
        beforeSend: function () {
            $("#divLoading").show();
        },
        success: function (data) {
            LMTDetailDashboardChart(data, Zaxis);
            return false;
        },
        @*error: function (xhr, status, error) {
            var err = eval("(" + xhr.responseText + ")");
            toastr.error(err.message);
        },*@
            //error: function (jqxhr, status, exception) {
            //    alert('Exception:', exception);
            //},
       error: function (XMLHttpRequest, textStatus, errorThrown) {
           alert("error");
           console.log('Could not get posts, server response: ' + textStatus + ': ' + errorThrown);
            },
        complete: function () {
            $("#divLoading").hide();
            $("#exportuserlist").show();
        }
        });
    return false;

Код контроллера выглядит следующим образом:

 public JsonResult LMTDetailDashboardList(String ServerID, String LicenseId, String Company, String FromDate, String ToDate, String FromHour, String ToHour)
    {

        int nameLength = Company.Length;
        int nameLength2 = ServerID.Length;
        int nameLength3 = LicenseId.Length;
        System.Text.ASCIIEncoding.ASCII.GetByteCount(Company);



        LMTUsage objLMT = new LMTUsage();
        LMTDAL objLMTDAL = new LMTDAL();

        TempData["Company"] = Company;
        TempData["ServerID"] = ServerID;
        TempData["LicenseId"] = LicenseId;
        TempData["FromDate"] = FromDate;
        TempData["ToDate"] = ToDate;
        TempData["FromHour"] = FromHour;
        TempData["ToHour"] = ToHour;

        if (object.Equals(ServerID, null))
        {
            ServerID = "All";
        }
        try
        {
            var response = objLMTDAL.GetLMTDetailUsage(ServerID, LicenseId, Company, FromDate, ToDate, FromHour, ToHour);
            if (!object.Equals(response, null))
            {
                objLMT.LMTDetailUsageList = response.ToList();
            }
        }
        catch (Exception ex)
        {
            throw;
        }
        return Json(objLMT.LMTDetailUsageList, JsonRequestBehavior.AllowGet);
    }

Когда значение "company" меньше по длине / размеру, ajax-вызов выполняет действие контроллера, но когда он больше, он выдает ошибку и не выполняет метод контроллера.
Я пытался исправить ошибки разными способами, но не смог их исправить. С отладчиком браузера, я получаю следующую ошибку. Экран ошибки
Примечание. Переменная «company» содержит значения, разделенные запятыми, из раскрывающегося списка множественного выбора.
Будь добр, освети его.

1 Ответ

0 голосов
/ 21 мая 2018

Проблема из-за длины данных. GET-запросы имеют ограничения по длине. Вот почему вызов ajax не попадает в контроллер. Вы можете использовать POST вместо метода GET. У запросов POST нет ограничений на длину данных.

Измените «тип» следующим образом:

тип: "POST",

Ваш окончательный сценарий будет:

$.ajax(
    {

        url: '@Url.Action("LMTDetailDashboardList", "DetailUsage")',
        dataType: "json",
        data:
        {
            ServerID: ServerID,
            LicenseId: LicenseId,
            company: company,
            fromDate: fromDate,
            toDate: toDate,
            fromhour: fromHour,
            toHour: toHour
        },
        type: "POST",
        error: function (xhr, status, error) {
            var err = eval("(" + xhr.responseText + ")");
            toastr.error(err.message);
        },
        beforeSend: function () {
            $("#divLoading").show();
        },
        success: function (data) {
            LMTDetailDashboardChart(data, Zaxis);
            return false;
        },
        @*error: function (xhr, status, error) {
            var err = eval("(" + xhr.responseText + ")");
            toastr.error(err.message);
        },*@
            //error: function (jqxhr, status, exception) {
            //    alert('Exception:', exception);
            //},
       error: function (XMLHttpRequest, textStatus, errorThrown) {
           alert("error");
           console.log('Could not get posts, server response: ' + textStatus + ': ' + errorThrown);
            },
        complete: function () {
            $("#divLoading").hide();
            $("#exportuserlist").show();
        }
        });
    return false;

Удачи!

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