2013-08-06 9 views
11

Ich versuche, einige einfache JSON an eine ASP.NET 4.5 Webmethod von jQuery übergeben. Und es funktioniert nicht so, wie ich es will. Es funktioniert, wenn ich die Eingänge als separate Parameter akzeptieren:Übergeben Sie ein benutzerdefiniertes Objekt an ASP.NET Webmethod von jQuery mit JSON

[WebMethod] 
public static Address GetJSonAddress(string name, string street) 

Aber wenn ich es als ein Objekt zu nehmen versuchen, es nicht funktioniert, was in übergeben wird ist einfach null:

[WebMethod] 
public static Address GetJSonAddress(Address newAddress) 

Ich habe versuchte Webmethoden, Pagemethods, WCF mit DataContractJsonSerializer ... nichts. Die Address-Klasse ist entsprechend mit Datamember/DataContract dekoriert. Die Eigenschaften werden einschließlich Groß- und Kleinschreibung zugeordnet.

Die jQuery, in der ich alle Arten der Weitergabe der Daten einschließlich des Einwickelns in ein Adressobjekt versucht habe ... wenn ich es anders als das mache, was ich habe, wird das Webmethod nicht aufgerufen und ich erhalte Fehler 500 :

Save2 = function() { 
var address = { prefix: GLOBALS.curr_prefix }; 

$('input[id^=' + GLOBALS.curr_prefix + '],select[id^=' + GLOBALS.curr_prefix + ']').each(function() { 
     address[this.id.substr(4)] = $.trim($(this).val()); 
}) 

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "/WebServices/Insert", 
    data: JSON.stringify(address), 
    dataType: "json", 
    success: function (data, textStatus) { 
     console.log(data, textStatus); 
    }, 
    failure: function (errMsg) { 
     MsgDialog(errMsg); 
    } 
}); 
} 

Schließlich wirklich keine Methode mit 121 Parameter haben möchte ich dies, mit 121 Eingabezeichenfolgen zu tun haben, und. Jede Hilfe wird geschätzt.

+1

Was passiert, wenn Sie 'Daten: {newaddress: JSON.stringify (Adresse)}'? – NoLifeKing

+0

Das Webmethod wird nicht aufgerufen und ich erhalte den Fehler 500 im Browser. Der POST sieht gut aus: {'Adresse': {"Name": "Name", "Straße": "Straße", "Stadt": "Stadt", "Zip": "11111"}} –

Antwort

-1

I am not aware of ASP. Aber in Ruby on Rails verwenden wir das folgende Verfahren. Meine Form hat fast 20 Felder. Über serializeArray(); kann ich alle Eingabefeldwerte an den Controller senden. Wie

Ihre HTML sollte wie

<input class="input" id="violation_date" type="text" name="violation_date" value=""/> 

"name" Feld ist hier mportant zu sehen sein.

var form = $("form#driver_info_form").serializeArray(); 
var hsh = { } 
$.each(form, function(i, e) { 
      hsh[e.name] = e.value 
     }); 

var jqxhr = $.post("/app/DriverInfo/save_driver_info", { 
      hsh: hsh 
     }, function() { }); 

Auf Steuerungsseite können wir param wie

{"hsh"=>{"violation_date"=>"date", "violation_time"=>"time", "violation_day"=>"week", "username"=>"name", "address"=>"address", "city"=>"city", "state"=>"state", "zip"=>"", "driver_lic_number"=>"123324", "radio_commercial"=>"Yes", "age"=>"", "birth_date"=>"", "sex"=>"", "hair"=>"", "eyes"=>"", "height"=>"", "weight"=>"", "race"=>""}, "accident_check"=>"false", "misdemeanor"=>"false", "traffic"=>"false", "non_traffic"=>"false", "commercial"=>"Yes"} 

Daraus erhalten wir die Werte zugreifen können.

Ich hoffe, dass dies Ihnen eine Richtlinie geben wird.

+0

Welche Art von Richtlinie sollte das gibt zu OP? Er stellte asp.net eine spezifische Frage und Sie antworten, wie Sie es in einer völlig anderen Umgebung tun würden. – NoRyb

36

Ich habe dieses Projekt schnell eingerichtet und konnte erfolgreich meine Webmethode aufrufen, bitte passen Sie Ihren Code entsprechend an. Stellen Sie sicher, dass Ihre Klasseneigenschaftsnamen die gleichen sind wie die, die Sie über JavaScript übergeben.

Webservice

public static Contact getContact(Contact cnt) 
    { 
     cnt.name = "Abijeet Patro"; 
     cnt.phone = "Blah Blah"; 
     return cnt; 
    } 

JavaScript/jQuery

$(document).ready(function() { 
     var cnt = {name:'Hello',phone:'Hello'}; 
     $.ajax({ 
      type: "POST", 
      url: "/Default.aspx/getContact", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      data: JSON.stringify({'cnt':cnt}), // Check this call. 
      success: function (data) { 
       debugger; 
      } 
     }); 
    }); 

Klasse

public class Contact 
{ 
    public string name { get; set; } 
    public string phone { get; set; } 
} 

Web Service Called


enter image description here

können Sie das Projekt von here greifen. Verwenden Sie auch Fiddler oder Chrome, um AJAX-Anfragen/-Antworten zu überwachen. Ich habe ein Bild hinzugefügt, um zu zeigen, wie AJAX-Anfragen mithilfe von Chrome überwacht werden. Fiddler ist noch besser und detaillierter.


enter image description here

+0

Danke, das war sehr hilfreich und ich sehe, was ich falsch gemacht habe. In meinem Fall war das Webmethod nicht statisch (im Gegensatz zu WCF) und hatte eine falsche JSON.Stringify-Syntax. –

+0

Vielen Dank! –

Verwandte Themen