2012-12-30 7 views
17

Ich habe den folgenden jQuery AJAX-Aufruf an eine ASP.Net-Seite.jQuery AJAX Aufruf zum Posten von Daten auf der ASP.Net-Seite (nicht Get, aber POST)

Wenn ich versuche, aus dem Anfrageobjekt die gebuchten Daten abzurufen, wird es nicht angezeigt. Mein aspx Seitencode ist wie folgt. Ich sende jede der geposteten Daten im JSON-Format an die Seite, aber es erscheint nicht im Code-Behind der Seite. Gibt es einige zusätzliche Einstellung in jQuery Ajax Anruf, die ich vermisse?

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ContentType = "application/json"; 

     string requestType = Request.Params["requestType"]; 


     //populate variables from posted data 
     string vendorId = Request.Params["vendorId"]; 
     string businessUnit = Request.Params["businessUnit"]; 
     string productSegmentId = Request.Params["productSegmentId"]; 
     string commitmentProgramId = Request.Params["programId"]; 
     string productManagerId = Request.Params["productManagerId"]; 
     string companyIds = Request.Params["companyIds"]; 
     string expired = Request.Params["expired"]; 
    } 

UPDATE 1: Stephen Antwort ist der beste Ansatz für diese, vor allem der Ansatz, den Process tut. Allerdings habe ich einen kleinen Trick gefunden, der es ermöglicht, Daten in gewohnter Weise wie zB Request ["vendorId"] usw. auf ASP.Net zu stellen. Um solche Daten von einer beliebigen jQuery ajax-Anfrage aus zu veröffentlichen, müssen Sie dies einfach tun stellen Sie sicher, dass die folgenden zwei Punkte angewendet werden, um Ihre jQuery ajax-Aufruf:

  1. der Content-Typ sollte aus Ihrem jQuery ajax-Aufruf gelassen werden oder wenn Sie es aufnehmen möchten, dann sollte es nicht eingestellt werden zu "application/json; charset = utf-8" aber zu "application/x-www-form-urlencoded; charset = UTF-8". Der Inhaltstyp teilt der ASP.Net-Seite nach meinem Verständnis den Typ der Daten mit, die gesendet werden, und nicht den Datentyp, der von der Seite erwartet wird.
  2. Der Datenteil von jQuery ajax sollte die in Anführungszeichen eingeschlossenen Datennamen nicht haben. So sollten Daten: {"venorId": "AD231", "businessUnit": "123"} durch Daten ersetzt werden: {vendorId: "AD231", businessUnit: "123"}. In diesem Beispiel lauten die Datennamen vendorId und businessUnit, auf die Sie in Ihrem ASP.Net-Code-Behind mit der üblichen ASP.Net-Syntax wie Request ["vendorId"] und Request ["businessUnit"] zugreifen können.
+0

Ich bin auch auf diese Weise versucht, alles funktioniert nicht für mich. Kann mir jemand helfen. – user1120998

Antwort

30

Option 1. Ihre Server-Side-Code halten die gleiche

zuerst die kendo.stringify entfernen. Dann entweder die content entfernen oder ändern ...

"application/x-www-form-urlencoded; charset=utf-8" 

... oder Ihre .ajax $ Aufruf, dies ändern:

$.post('DocSummaryDataAsync.aspx', { vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: 'TotalCount' }, function (data) { }); 

Option 2. Ändern der POST GET

Gefällt Ihnen dieses

$.ajax({ 
async: true, 
type: "GET", 
etc. 

Dies wird Ihre Daten über das Q passieren SehryString. Wenn Sie die kendo.stringify Anruf entfernen würden Sie alle Werte wie folgt zugreifen:

string vendorId = Request.QueryString[0]; 
string businessUnit = Request.QueryString[1]; 
etc. 

Option 3. Verwenden Sie Ihre ursprüngliche .ajax Anruf $

Wenn Sie Ihre ursprünglichen $ Schnipsel verwenden dann gilt folgendes:

Anfrage.Params erhält eine "kombinierte Sammlung von QueryString-, Form-, Cookies- und ServerVariables-Elementen". - this link

Sie arbeiten nicht mit irgendwelchen von denen. Stattdessen müssen Sie auf Request.InputStream zugreifen.

Hier ist, wie Sie tun können, dass:

Erstellen Sie eine Klasse Seite auf dem Server, der dem angeforderten JSON-Objekt abbildet, z.B.

Konvertieren Sie Request.InputStream in diesen Typ, und dann können Sie es verwenden.

public void ProcessRequest() 
{ 
    System.IO.Stream body = Request.InputStream; 
    System.Text.Encoding encoding = Request.ContentEncoding; 
    System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); 
    string json = reader.ReadToEnd(); 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    MyClass myclass = (MyClass)serializer.Deserialize(json, typeof(MyClass)); 
    int vendorId = myclass.vendorId; 
    string requestType = myclass.requestType; 
    // etc... 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    ProcessRequest(); 
} 
+2

Stephen - Danke. Du bist ein Genie. Ich hoffe, ich könnte Ihnen für diese Antwort eine Million Punkte geben. Das gibt mir, was ich brauchte. – Sunil

+0

Stephen - Aber wenn ich nur den Typ: "POST" durch Typ: "Get" ersetzen, dann werden die Daten auf das erste Element von Request.Params [0] gebucht, obwohl dieser Parameter keinen Namen hat. Ist Get Like Post für ASPX-Seiten? – Sunil

+0

Stephen - Warum ein Typ: Get post die Daten, die ich in Daten senden: ....? – Sunil