3 Stimmen

Warum Javascript Aufruf zu Page WebMethod ergibt "500: Unbekannte Web-Methode"?

Ich habe eine Seite mit dieser Methode in CreateTicket.aspx.cs:

[WebMethod()]
public static string Categories()
{
    var business = new CategoryBusiness();
    var categories = business.ListRootCategories();

    return categories.Json();
}

Und der Javascript/Jquery-Code auf der Seite (gleiche Seite, .aspx):

function LoadRootCategories() {
    PageMethod("CreateTicket.aspx", "Categories", [], LoadCategoriesSucceded, LoadCategoriesFailed);
}

function PageMethod(page, fn, paramArray, successFn, errorFn)  
{
    //Create list of parameters in the form:  
    //{"paramName1":"paramValue1","paramName2":"paramValue2"}  
    var paramList = '';  
    if (paramArray.length > 0)  
    {  
        for (var i=0; i<paramArray.length; i+=2)  
        {  
            if (paramList.length > 0) paramList += ',';  
                paramList += '"' + paramArray[i] + '":"' + paramArray[i+1] + '"';  
        }  
    }  
    paramList = '{' + paramList + '}';  
    //Call the page method  
    $.ajax({  
        type: "POST",  
        url: page + "/" + fn,  
        contentType: "application/json; charset=utf-8",  
        data: paramList,  
        dataType: "json",  
        success: successFn,  
        error: errorFn
    });
}

Wenn ich es mit Firebug ausführe, erhalte ich den folgenden Fehler auf der Konsole:

500 Internal Server Error
Unknown web method Categories.
[ArgumentException: Unknown web method Categories.
Parameter name: methodName]
   System.Web.Script.Services.WebServiceData.GetMethodData(String methodName) +517489
   System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) +168
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +75

Warum ist das so?

6voto

Victor Rodrigues Punkte 11013

Ich habe dieses Problem gelöst.

Was war geschehen? Etwas Dummes (wie immer):

  • Inherits'-Attribut fehlte in der CreateTicket.aspx-Seitendeklaration, so dass die CreateTicket.aspx.cs nicht als partielle Klasse gebunden wurde, selbst bei Verwendung des CodeBehind-Attributs.

0voto

Powerlord Punkte 84404

Hat CreateTicket.aspx von WebService geerbt?

Selbst wenn dies der Fall ist, sollte Ihre Klasse auch die ScriptService Attribut, so dass .NET zusätzliche Klassen generiert, um den Aufruf aus JavaScript zu unterstützen.

Hinweis: Dies gilt nur für Nicht-WCF-Webdienste. WCF fügt seine eigenen Attribute für die Ausführung von Webdiensten hinzu.

0voto

Powerlord Punkte 84404

Wenn Sie über .NET 3.5 oder eine neuere Version verfügen, können Sie auch einen WCF-Dienst einrichten.

Es gibt eine Kurzanleitung auf CodeProject, wie Sie die OperationsContract- und DataContract-Annotationen in Ihren Klassen einrichten, um den genannten Dienst zu erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X