admin管理员组

文章数量:1317898

I have a page with this method in CreateTicket.aspx.cs:

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

    return categories.Json();
}

And the javascript/jquery code on the page (same page, .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
    });
}

Running it on firebug, I get the following error on console:

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; pletedSynchronously) +75

Why is this happening?

I have a page with this method in CreateTicket.aspx.cs:

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

    return categories.Json();
}

And the javascript/jquery code on the page (same page, .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
    });
}

Running it on firebug, I get the following error on console:

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; pletedSynchronously) +75

Why is this happening?

Share Improve this question edited Aug 28, 2009 at 17:36 Powerlord 88.8k17 gold badges129 silver badges177 bronze badges asked Aug 28, 2009 at 17:11 Victor RodriguesVictor Rodrigues 11.8k25 gold badges78 silver badges108 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 6

I resolved this problem.

What was happening? Something stupid (as usual):

  • 'Inherits' attribute was missing in the CreateTicket.aspx page declaration, so the CreateTicket.aspx.cs wasn't bound as the partial class, even using the CodeBehind attribute.

Does CreateTicket.aspx inherit from WebService?

Even if it does, your class should also have the ScriptService attribute on it, so that .NET generates additional classes to assist in calling it from JavaScript.

Note: This only applies to non-WCF web services. WCF adds in its own attributes for doing web services.

If you have .NET 3.5 or newer, you can also set up a WCF service.

There's a quick guide on CodeProject on how to set up the OperationsContract and DataContract annotations on your classes in order to create said service.

本文标签: aspnetWhy Javascript calling to Page WebMethod results in quot500 Unknown web methodquotStack Overflow