2010-12-22 22 views
13

Estoy tratando de llamar a un método simple en mi código detrás de usar Jquery con Ajax. Pero recibo una excepción 404 no encontrada cada vez. Lamentablemente, esta es una solución de formularios web. Así que no tiene todas las ventajas de MVC :(llamada de método Ajax

Se pone en el método de javascript y da la alerta, pero no voy a entrar en mi método C#. Mi experiencia previa en el uso de este método es Jquery en una página web MVC. ? ¿es compatible con los sitios WebForms

mi Javascript es:

$(document).ready(function() { 

       $('#btn_<%=UserStuff.tag %>').click(function() {      

        var value = $('#<%#Eval("tag") %>twink').val(); 
        something(value);      
       }); 
      }); 


      function something(theval) { 

      alert(theval); 

       $.ajax({ 
        type: "POST", 
        url: "/Default.aspx/MyMethod?something=" + theval, 
        data: "{}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(msg) { 
         alert(msg); 
        } 
       }); 
      } 
} 

Y mi código C# es:.

public JsonResult MyMethod(string something) 
{ 
    JsonResult ret = new JsonResult();  

    return ret; 
} 

Gracias de antemano

Respuesta

34

Su método devuelve JsonResult. Esto es específico de MVC y no puede usarlo en una aplicación de formularios web.

Si desea llamar a métodos en el código subyacente en una aplicación Web Forms clásica podría utilizar PageMethods:

[WebMethod] 
public static string GetDate() 
{ 
    return DateTime.Now.ToString(); 
} 

Y luego llamar al método:

$.ajax({ 
    type: 'POST', 
    url: 'PageName.aspx/GetDate', 
    data: '{ }', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function(msg) { 
     // Do something interesting here. 
    } 
}); 

Y aquí hay un trabajo completo ejemplo que escribí para usted:

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Web.Services" %> 
<script type="text/C#" runat="server"> 
    [WebMethod] 
    public static string SayHello(string name) 
    { 
     return "Hello " + name; 
    } 
</script> 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="/scripts/jquery-1.4.1.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $.ajax({ 
       type: 'POST', 
       url: 'default.aspx/sayhello', 
       data: JSON.stringify({ name: 'John' }), 
       contentType: 'application/json; charset=utf-8', 
       dataType: 'json', 
       success: function (msg) { 
        // Notice that msg.d is used to retrieve the result object 
        alert(msg.d); 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <form id="Form1" runat="server"> 

    </form> 
</body> 
</html> 

PageMethods are not limi ted a tipos de argumentos simples. Puede usar cualquier tipo como entrada y salida, se serializará automáticamente con JSON.

+0

yeaaaaaaaaaaaaaaaaaaaaaah !!!!!!!!!!!! ¡Muy, muy agradable! ¡Funciona! ¡¡¡¡¡¡¡¡Gracias!!!!!!!! ¡Que tengas una Feliz Navidad, Darin! – Funky

+0

@LooDaFunk, ¡también ten una feliz Navidad! –

+0

@DarinDimitrov Tengo una pregunta: cuando trato de llamar a un método web que está dentro de un archivo de servicio web .asmx, tengo que descomentar [System.Web.Script.Services.ScriptService] en un archivo .cs, de la manera en que está usando json o invocar un método web como veo ¿Debo agregar [System.Web.Script.Services.ScriptService] arriba [WebMethod]? thx de antemano – Karamafrooz