ArgumentException при попытке вызвать метод из C # с AJAX - PullRequest
0 голосов
/ 03 мая 2019

Мне нужно вызвать метод с AJAX во внешнем интерфейсе, и я сделал с помощью $ .ajax (), но теперь он выдает исключение ArgumentException, которое говорит, что метод неизвестен. Есть идеи как это исправить?

Во многих ответах, которые я нашел, говорилось, что я должен сделать это публичным и статичным. Я это сделал. Также метод не нуждается в параметрах.

Из того, что я могу понять из трассировки стека, может быть, ему нужны два параметра? Отправитель объектов и EventArgs e, просто когда я их добавляю, я не знаю, что отправить из AJAX. Каковы эти два параметра и может ли быть проблема?

        [WebMethod]
        public static void ExportToExcelTemp()
        {

            object[][] table = HttpContext.Current.Session["ExcelData"] as object[][];

            DataTable dttable = new DataTable();


            for (int i = 0; i < table[0].Length; i++)
            {
                dttable.Columns.Add(i.ToString());
            }
            foreach (object[] data in table)
            {
                dttable.Rows.Add(data);
            }

            String fileName = (String)HttpContext.Current.Session["uploadFilename"];
            string _fileName = Path.GetFileNameWithoutExtension(fileName);


            using (ClosedXML.Excel.XLWorkbook wb = new ClosedXML.Excel.XLWorkbook())
            {
                var ws = wb.Worksheets.Add((fileName.Length > 31 ? fileName.Substring(0, 31) : fileName));
                ws.FirstRow().FirstCell().InsertData(dttable.Rows);
                ws.Columns().AdjustToContents();
                // ws.Tables.First().ShowHeaderRow = false;

                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.Buffer = true;
                System.Web.HttpContext.Current.Response.Charset = "";
                System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + _fileName + ".xlsx");
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
                    System.Web.HttpContext.Current.Response.Flush();
                    System.Web.HttpContext.Current.Response.End();
                }

            }
        }
        $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                traditional: true,
                //async: false,
                data: {},
                url: "PdfViewer.aspx/ExportToExcelTemp",

                success: function (data) {

                    DISMISS_LOADING();

                    showSuccess(data)

                    if (data.status == 401) {
                        NO_AUTHENTICATION();
                    }

                    return data.success;
                },
                error: function (xhr, textStatus, err) {
                    showError("readyState: " + xhr.readyState + "\n responseText: " + xhr.responseText + "\n status: " + xhr.status
                                + "\n text status: " + textStatus + "\n error: " + err);
                },
                failure: function () {
                    DISMISS_LOADING();
                    showError("Testing Failure");
                    return false;
                }
            });
stacktrace:
[ArgumentException: Unknown web method ExportToExcelTemp.
Parameter name: methodName]
   System.Web.Script.Services.WebServiceData.GetMethodData(String methodName) +621102
   System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) +207
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +141
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +48
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +71
...