c# - jQuery ajax调用未击中 Controller ,因为字符串数据参数较大

标签 c# jquery ajax asp.net-mvc error-handling

在我的 View 文件中,我正在进行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;

Controller 代码如下:
 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调用会触发 Controller 操作,但当值较大时,它将引发错误并且不会触发 Controller 方法。
我试图以多种方式纠正错误,但无法解决。使用浏览器调试器,我现在遇到以下错误。 Error Screen
注意:“company”变量包含多选下拉列表中的逗号分隔值。
请给它一些照明。

最佳答案

问题是由于数据长度。 GET请求具有长度限制。这就是为什么ajax调用未命中 Controller 的原因。您可以使用POST而不是GET方法。 POST请求对数据长度没有限制。

使用以下方式更改“类型”:

type: "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;

祝好运!

关于c# - jQuery ajax调用未击中 Controller ,因为字符串数据参数较大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50230488/

相关文章:

c# - 位数组到字符串再返回位数组

javascript - 按钮无法触发 jquery ui 中的幻灯片

javascript - 更改所需表单输入的 CSS 图像位置

javascript - AJAX 从服务器请求另一个 JavaScript 或函数

javascript - Rails 中的远程模态形式,不触发 AJAX 事件

c# winform绘制闪烁图像

c# - 在 C# 中没有类型有什么新东西?

c# - 在 ForEach 函数中模拟 break 语句

javascript - 如果文本不适合显示更多/更少

javascript - 一个页面上的多个页面