2012-05-18 16 views
9

Hola estoy llamando a un método simple página de Javascript, aquí está mi código de marcado enmétodo página asp.net Llamar desde javascript no funciona

function OnCallSumComplete(result, userContext, methodName) {    
      alert(result); 
} 
function OnCallSumError(error, userContext, methodName) { 
    if (error !== null) { 
     alert(error.get_message()); 
    } 
} 
function test(){ 
    var contextArray = ""; 
    PageMethods.TestMethod("test parameter", OnCallSumComplete, OnCallSumError, contextArray); 
} 

<asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server" /> 

en cs

[System.Web.Services.WebMethod] 
public static string TestMethod(string para) 
{ 

    return "Yes this is working"; 
} 

la alerta espectáculo de la resultado y dice "nulo". Reviso Firebug y no veo el error de la consola.

Si cambio la TestMethod a

[System.Web.Services.WebMethod] 
public static string TestMethod() 
{ 
    return "Yes this is working"; 
} 

Y PageMethod a

PageMethods.TestMethod(function (response) { alert(response); }); 

Se muestra la respuesta correcta como "Sí esto está funcionando". Sin embargo, necesito pasar el parámetro a la función. ¿Extraño algo?

Gracias por la ayuda.

Respuesta

2

Creo que tiene que usar [ScriptMethod] en lugar de o además de [WebMethod] para tener métodos asmx disponibles a través de llamadas javascript. La razón por la que podría funcionar sin tomar un parámetro es porque la solicitud no tiene que analizar nada para procesar el método.

Pruébelo con [ScriptMethod] (y posiblemente [ScriptService] en la definición de su clase) y vea si eso hace la diferencia.

+0

Hola, lo probé con [System.Web.Script.Services.ScriptMethod] pero me salió el error "PageMethods no está definido" en la consola de Firebug. – windforceus

+0

¿Agregó ScriptService también? Si la clase ya no se define, es porque el archivo javascript que define la interfaz de clase no se está cargando. Intente mirar la pestaña de red y vea si hay algo 404 en usted. – RTigger

+0

Tengo un error de compilación. "Attribute 'System.Web.Script.Services.ScriptService' no es válido en este tipo de declaración. Solo es válido en las declaraciones de 'clase, interfaz'.\t " – windforceus

0

Por lo que recuerdo, solo necesita 3 parámetros en su llamada (su param, onsuccess y onflure). ¿Intentó usar PageMethods.TestMethod ("parámetro de prueba", OnCallSumComplete, OnCallSumError);

+0

sí, lo hice, pero todavía me sale "nulo" mensaje. Gracias por la respuesta. – windforceus

3

Creo que el problema principal es con el conjunto que está utilizando para ScriptManager.

<asp:ScriptManager ID="ScriptManager1" 
        EnablePageMethods="true" 
        runat="server" /> 

para resolver su problema en el uso Webconfig -

<pages> 
    <controls> 
    <add tagPrefix="ajax" 
     namespace="System.Web.UI" 
     assembly="System.Web.Extensions, 
        Version=1.0.61025.0, 
        Culture=neutral, 
        PublicKeyToken=31bf3856ad364e35"/> 
    </controls> 
</pages> 

y en su página .aspx uso siguiendo las líneas -

<ajax:ScriptManager ID="ScriptManager1" 
        EnablePageMethods="true" 
        runat="server" /> 

Hope esto le ayudará a resolver su problema.

1

El problema es que en su Web.config necesita tener un módulo (IHttpModule) habilitado: ScriptModule-4.0. Esto está habilitado por defecto, pero puede haberlo eliminado. Búsquelo en el archivo Web.config de toda la máquina, si tiene curiosidad, y vea si se eliminó de su Web.config local. Su declaración debe estar en system.webServer/modules (para IIS> = 7) y system.web/httpModules para el servidor web incorporado de Visual Studio o IIS < 7.

Cuestiones relacionadas