Мне нужно вызвать метод с 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