2009-05-20 12 views
34

Ich versuche, eine serverseitige Methode von der Clientseite über jQuery aufzurufen. Mein Code ist wie folgt:Aufrufen einer asp.net-serverseitigen Methode über jQuery

Server-Seite:

using System.Web.Services; 
    [WebMethod()] 
    //[ScriptMethod()] 
    public static void SendMessage(string subject, string message, string messageId, string pupilId) 
    { 
     //Send message 
    } 

Client-Seite:

$("#btnSendMessage").live("click", function(){ 
    var subject = $("#tbSubject").val(); 
    var message = $("#tbMessage").val(); 
    var messageId = $("#hdnMessageId").val(); 
    var pupilId = $("#hdnPupilId").val(); 

    $.ajax({ 
     type: "POST", 
     url: "./MessagePopup.aspx/SendMessage", 
     data: ("subject=" + subject + "&message=" + message + "&messageId=" + messageId + "&pupilId=" + pupilId), 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      alert(textStatus); 
     }, 
     success: function(result){ 
     alert("success"); 
     } 
    }); 
    return false; 
}); 

Ich habe einen Haltepunkt auf der Serverseite Sendmessage-Methode hinzugefügt, aber es trifft es nie, aber wenn ich den Code ausführe, wird die jQuery-Erfolgsmethode aufgerufen. Was könnte das verursachen?

+0

und Code in der SendMessage wird nicht ausgeführt oder kann nur nicht debuggen? –

+0

Der SendMessage-Code wird nicht ausgeführt und ich kann es nicht debuggen. – Fermin

+0

Ist Ihre serverseitige Methode wirklich eine ASPX-Seite und kein ASMX- oder WCF-Webdienst? URL zeigt auf aspx-Webseite. –

Antwort

36

Um ASP.NET AJAX "ScriptServices" und Seite Methoden aufrufen, können Sie die vollen $ Schnipsel() Syntax verwenden müssen:

$.ajax({ 
    type: "POST", 
    url: "MessagePopup.aspx/SendMessage", 
    data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // Do something interesting here. 
    } 
}); 

Sehen Sie diese Post für Details, warum das notwendig ist: http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Edit: Die Erweiterung ändert sich nicht in .asmx, aber bleibt .aspx.

+4

Es funktioniert, nur Unterschied zu diesem Code ist die URL war MessagePopup.aspx, nicht asmx. Danke Leute. – Fermin

+0

@Dave Ward: Vielen Dank für die Erstellung von Beispielen, die direkt aus der Box funktionieren! – delliottg

+0

Können Sie mir bitte einige Einblicke in mein Problem geben: http://StackOverflow.com/Questions/41752213/Why-is-asmx-giving-an-error-when-pulling-Data-using-Client-Script. Vielen Dank. Meine ist eine '.asmx' – Si8

2

Sie sollten Web-Service anstelle von regulären Aspx-Webseite verwenden. Webseiten haben keine Unterstützung, um Webmethoden aufzurufen. Ich glaube, dass Ihre jQuery-Anfrage stattdessen die HTML-Seite lädt. Ich schlage vor, Sie zwei Dinge:

  1. Verwenden Fiddler2 (IE) oder HttpFox (mit Firefox) AJAX Anfragen und Antworten auf Client-Seite zu debuggen.
  2. Verwenden Sie den WCF-Webdienst auf der Serverseite. In diesem Fall können Sie SvcConfigEditor und SvcTraceViewer verwenden, um Webmethoden auf der Serverseite zu konfigurieren und zu debuggen.
+0

Warum sagst du WCF statt ASMX? – Fermin

+0

WCF ist jetzt primäre und empfohlene Kommunikationstechnologie für .NET. Es hat eine Menge Fähigkeiten über asmx Webservices, bessere Testbarkeit (Google für "Unit Testing WCF Services"). Strategisch ist WCF eine richtige Wahl zu lernen. Überprüfen Sie diesen Beitrag für mehr über Asmx vs WCF: http://social.msdn.microsoft.com/Forums/en-US/dnetnetstocktradersampleapplication/thread/048d8a45-dad8-431f-886c-9aae78862285 –

+0

Auch können Sie Microsoft-Leistung überprüfen Benchmarks: http://msdn.microsoft.com/en-us/library/bb310550.aspx –

9

Es sieht so aus, als ob Sie versuchen, eine Seitenmethode zu verwenden.

einen Blick hier nehmen Page Methods in ASP.NET Ajax um Hilfe

+0

Ich wusste nicht über Seite Methoden +1 –

1

Hier ist Code, der in Ihrer Situation funktionieren könnte.

<script type="text/javascript"> 
    $(document).ready(function() { 

     // Add the page method call as an onclick handler for the button. 
     $("#btnSubmit").click(function() { 

      //get the string from the textbox 
      $.ajax({ 

       type: "POST", 
       url: "testSearch.aspx/GetMyShippingDate", 
       contentType: "application/json; charset=utf-8", 
       data: "{'tracking_num': '" + $("#txtTrackingNumber").val() + "'}", 
       dataType: "json", 
       success: function (date) { 

        // Replace the div's content with the page method's return. 
        Success(date); 

       }, 
       error: Failed 
      }); 
     }); 
    }); 

    function Success(result) { 
      $("#ParcelShippingDate").html(result.d); 
     } 
     function Failed(result) { 
      alert(result.status + " " + result.statusText); 
     } 

Es ist ein Beispiel, das für mich immer funktioniert hat. Hier

ist der komplette Artikel http://www.webdeveloperpost.com/Articles/How-to-use-jquery-ajax-in-asp-dot-net-web-page.aspx

Es funktioniert gut für diejenigen, die einen geraden Weg nach vorn für die Verwendung des jquery asp.net Methodenaufrufes

2
$.ajax({ 
     type: "POST", 
     url: "MessagePopup.aspx/SendMessage", 
     data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}", 
     async: true, 
     cache: false, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function() {}, 
     error:function (xhr, ajaxOptions, thrownError){ alert(thrownError); } 
    }); 

zurück mögen Wenn dies nicht funktioniert .. .und gibt "Syntaxfehler: Syntaxfehler" ... dann hinzufügen, um dieses

<httpHandlers> 
      <remove verb="*" path="*.asmx"/> 
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=31BF3856AD364E35"/> 
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=31BF3856AD364E35"/> 
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=31BF3856AD364E35" validate="false"/> 
     </httpHandlers> 
     <httpModules> 
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, 
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </httpModules> 

zwischen </compilation> und </system.web> in Ihrer web.config-Datei.

Hoffe, dass dies jemand helfen wird, weil mich eine Weile dauerte, um herauszufinden, dass neben jquery Funktion ich das in Web.Config hinzufügen muss.

Verwandte Themen